From ab0a50979b9eb4dfa3320eff7e187e41efedf7a9 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 8 Aug 2014 14:30:41 +0200 Subject: Update Chromium to beta version 37.0.2062.68 Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi --- chromium/tools/DEPS | 6 - chromium/tools/OWNERS | 3 - chromium/tools/PRESUBMIT.py | 50 - chromium/tools/android/android_tools.gyp | 10 + chromium/tools/android/file_poller/file_poller.gyp | 18 + chromium/tools/android/forwarder2/forwarder.gyp | 20 +- chromium/tools/android/memdump/memdump.gyp | 36 +- chromium/tools/android/ps_ext/ps_ext.gyp | 36 + .../tools/android/purge_ashmem/purge_ashmem.gyp | 13 - chromium/tools/android/run_pie/run_pie.gyp | 49 + chromium/tools/bash-completion | 25 - chromium/tools/bisect-builds.py | 859 - chromium/tools/bisect-manual-test.py | 53 - chromium/tools/bisect-perf-regression.py | 2948 -- chromium/tools/bisect_test.py | 53 - chromium/tools/bisect_utils.py | 503 - chromium/tools/check_ecs_deps/check_ecs_deps.py | 202 - chromium/tools/checkbins/checkbins.py | 109 - chromium/tools/checkdeps/DEPS | 3 - chromium/tools/checkdeps/PRESUBMIT.py | 25 - chromium/tools/checkdeps/builddeps.py | 348 - chromium/tools/checkdeps/checkdeps.py | 229 - chromium/tools/checkdeps/checkdeps_test.py | 177 - chromium/tools/checkdeps/cpp_checker.py | 113 - chromium/tools/checkdeps/graphdeps.py | 407 - chromium/tools/checkdeps/java_checker.py | 107 - chromium/tools/checkdeps/results.py | 178 - chromium/tools/checkdeps/rules.py | 178 - chromium/tools/checklicenses/OWNERS | 3 - chromium/tools/checklicenses/checklicenses.py | 506 - chromium/tools/checkperms/OWNERS | 1 - chromium/tools/checkperms/PRESUBMIT.py | 27 - chromium/tools/checkperms/checkperms.py | 544 - .../tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp | 1486 + chromium/tools/clang/blink_gc_plugin/Config.h | 173 + chromium/tools/clang/blink_gc_plugin/Edge.cpp | 75 + chromium/tools/clang/blink_gc_plugin/Edge.h | 245 + chromium/tools/clang/blink_gc_plugin/JsonWriter.h | 73 + chromium/tools/clang/blink_gc_plugin/Makefile | 21 + .../tools/clang/blink_gc_plugin/NeedsTracing.h | 31 + chromium/tools/clang/blink_gc_plugin/OWNERS | 3 + .../tools/clang/blink_gc_plugin/README.chromium | 2 + .../tools/clang/blink_gc_plugin/RecordInfo.cpp | 515 + chromium/tools/clang/blink_gc_plugin/RecordInfo.h | 173 + .../tools/clang/blink_gc_plugin/TracingStatus.h | 29 + .../tools/clang/blink_gc_plugin/process-graph.py | 464 + chromium/tools/clang/plugins/ChromeClassTester.cpp | 34 +- chromium/tools/clang/plugins/ChromeClassTester.h | 12 +- chromium/tools/clang/plugins/FindBadConstructs.cpp | 731 - .../clang/plugins/FindBadConstructsAction.cpp | 55 + .../tools/clang/plugins/FindBadConstructsAction.h | 32 + .../clang/plugins/FindBadConstructsConsumer.cpp | 687 + .../clang/plugins/FindBadConstructsConsumer.h | 100 + chromium/tools/clang/plugins/Makefile | 2 +- chromium/tools/clang/plugins/Options.h | 25 + .../tools/clang/scripts/blink_gc_plugin_flags.sh | 31 + chromium/tools/clang/scripts/package.sh | 105 +- chromium/tools/clang/scripts/repackage.sh | 63 + chromium/tools/clang/scripts/update.py | 216 +- chromium/tools/clang/scripts/update.sh | 323 +- chromium/tools/code_coverage/croc.css | 102 - chromium/tools/code_coverage/croc.py | 722 - chromium/tools/code_coverage/croc_html.py | 451 - chromium/tools/code_coverage/croc_scan.py | 164 - chromium/tools/code_coverage/croc_scan_test.py | 187 - chromium/tools/code_coverage/croc_test.py | 758 - chromium/tools/code_coverage/example.croc | 197 - .../code_coverage/third_party/README.chromium | 11 - .../tools/code_coverage/third_party/sorttable.js | 494 - chromium/tools/compile_test/compile_test.py | 65 - chromium/tools/coverity/coverity.py | 308 - chromium/tools/cr/OWNERS | 2 - chromium/tools/cr/README | 14 - chromium/tools/cr/cr-bash-helpers.sh | 48 - chromium/tools/cr/cr.sh | 14 - chromium/tools/cr/cr/__init__.py | 15 - chromium/tools/cr/cr/actions/__init__.py | 10 - chromium/tools/cr/cr/actions/action.py | 49 - chromium/tools/cr/cr/actions/adb.py | 144 - chromium/tools/cr/cr/actions/builder.py | 72 - chromium/tools/cr/cr/actions/debugger.py | 51 - chromium/tools/cr/cr/actions/gdb.py | 40 - chromium/tools/cr/cr/actions/gyp.py | 26 - chromium/tools/cr/cr/actions/installer.py | 55 - chromium/tools/cr/cr/actions/linux.py | 50 - chromium/tools/cr/cr/actions/ninja.py | 86 - chromium/tools/cr/cr/actions/runner.py | 87 - chromium/tools/cr/cr/auto/__init__.py | 10 - chromium/tools/cr/cr/auto/build/__init__.py | 5 - chromium/tools/cr/cr/auto/client/__init__.py | 5 - chromium/tools/cr/cr/auto/user/__init__.py | 5 - chromium/tools/cr/cr/autocomplete.py | 27 - chromium/tools/cr/cr/base/__init__.py | 5 - chromium/tools/cr/cr/base/android.py | 116 - chromium/tools/cr/cr/base/arch.py | 70 - chromium/tools/cr/cr/base/buildtype.py | 58 - chromium/tools/cr/cr/base/client.py | 215 - chromium/tools/cr/cr/base/host.py | 149 - chromium/tools/cr/cr/base/linux.py | 44 - chromium/tools/cr/cr/base/platform.py | 70 - chromium/tools/cr/cr/commands/__init__.py | 9 - chromium/tools/cr/cr/commands/build.py | 81 - chromium/tools/cr/cr/commands/command.py | 104 - chromium/tools/cr/cr/commands/debug.py | 40 - chromium/tools/cr/cr/commands/info.py | 43 - chromium/tools/cr/cr/commands/init.py | 180 - chromium/tools/cr/cr/commands/install.py | 36 - chromium/tools/cr/cr/commands/prepare.py | 48 - chromium/tools/cr/cr/commands/run.py | 50 - chromium/tools/cr/cr/commands/select.py | 61 - chromium/tools/cr/cr/commands/shell.py | 53 - chromium/tools/cr/cr/commands/sync.py | 55 - chromium/tools/cr/cr/config.py | 240 - chromium/tools/cr/cr/context.py | 217 - chromium/tools/cr/cr/fixups/__init__.py | 9 - chromium/tools/cr/cr/fixups/arch.py | 54 - chromium/tools/cr/cr/loader.py | 123 - chromium/tools/cr/cr/plugin.py | 320 - chromium/tools/cr/cr/targets/__init__.py | 9 - chromium/tools/cr/cr/targets/chrome.py | 26 - chromium/tools/cr/cr/targets/chromium_testshell.py | 29 - chromium/tools/cr/cr/targets/content_shell.py | 28 - chromium/tools/cr/cr/targets/target.py | 157 - chromium/tools/cr/cr/visitor.py | 257 - chromium/tools/cr/main.py | 94 - chromium/tools/crx_id/PRESUBMIT.py | 27 - chromium/tools/crx_id/__init__.py | 8 - chromium/tools/crx_id/crx_id.py | 151 - chromium/tools/crx_id/crx_id_unittest.py | 85 - .../crx_id/jebgalgnebhfojomionfpkfelancnnkf.crx | Bin 1843 -> 0 bytes chromium/tools/cygprofile/cygprofile.cc | 401 - chromium/tools/cygprofile/cygprofile.gyp | 23 +- chromium/tools/cygprofile/mergetraces.py | 186 - chromium/tools/cygprofile/patch_orderfile.py | 117 - chromium/tools/cygprofile/symbolize.py | 251 - chromium/tools/deps2git/PRESUBMIT.py | 32 - chromium/tools/deps2git/WATCHLISTS | 23 - chromium/tools/deps2git/codereview.settings | 4 - chromium/tools/deps2git/deps2git.py | 228 - chromium/tools/deps2git/deps2submodules.py | 168 - .../tools/deps2git/deps2submodules_unittest.py | 84 - chromium/tools/deps2git/deps_utils.py | 135 - chromium/tools/deps2git/git_tools.py | 210 - chromium/tools/deps2git/svn_to_git_public.py | 188 - chromium/tools/diagnose-me.py | 109 - .../dromaeo_benchmark_runner.py | 266 - chromium/tools/emacs/chrome-filetypes.el | 16 - chromium/tools/emacs/flymake-chromium.el | 122 - chromium/tools/emacs/trybot-linux.txt | 6 - chromium/tools/emacs/trybot-mac.txt | 1985 -- chromium/tools/emacs/trybot-windows.txt | 72 - chromium/tools/emacs/trybot.el | 176 - chromium/tools/export_tarball/export_tarball.py | 172 - chromium/tools/export_tarball/export_v8_tarball.py | 135 - chromium/tools/find_depot_tools.py | 40 - chromium/tools/find_runtime_symbols/OWNERS | 1 - chromium/tools/find_runtime_symbols/PRESUBMIT.py | 45 - chromium/tools/find_runtime_symbols/README | 24 - .../find_runtime_symbols/find_runtime_symbols.py | 214 - .../find_runtime_symbols/prepare_symbol_info.py | 231 - .../tools/find_runtime_symbols/reduce_debugline.py | 68 - .../tools/find_runtime_symbols/static_symbols.py | 277 - chromium/tools/flakiness/find_flakiness.py | 179 - chromium/tools/gdb/gdb_chrome.py | 297 - .../gen_keyboard_overlay_data.py | 529 - chromium/tools/generate_stubs/generate_stubs.py | 4 +- .../generate_stubs/generate_stubs_unittest.py | 6 +- chromium/tools/git/README | 16 - chromium/tools/git/for-all-touched-files.py | 114 - chromium/tools/git/git-diff-ide.py | 93 - chromium/tools/git/git-utils.sh | 17 - chromium/tools/git/graph.sh | 42 - chromium/tools/git/mass-rename.py | 50 - chromium/tools/git/mass-rename.sh | 17 - chromium/tools/git/mffr.py | 169 - chromium/tools/git/move_source_file.bat | 6 - chromium/tools/git/move_source_file.py | 194 - chromium/tools/git/post-checkout | 22 - chromium/tools/git/post-merge | 12 - chromium/tools/git/update-copyrights.sh | 7 - chromium/tools/gn/gn.gyp | 57 +- .../tools/grit/grit/format/chrome_messages_json.py | 5 +- .../grit/format/chrome_messages_json_unittest.py | 26 +- chromium/tools/grit/grit/format/data_pack.py | 117 +- .../tools/grit/grit/format/data_pack_unittest.py | 29 +- chromium/tools/grit/grit/format/html_inline.py | 24 +- .../policy_templates/policy_template_generator.py | 34 +- .../writers/adml_writer_unittest.py | 2 +- .../writers/admx_writer_unittest.py | 2 +- .../format/policy_templates/writers/doc_writer.py | 65 +- .../writers/doc_writer_unittest.py | 12 + .../policy_templates/writers/ios_plist_writer.py | 122 + .../writers/ios_plist_writer_unittest.py | 208 + .../format/policy_templates/writers/json_writer.py | 24 +- .../writers/json_writer_unittest.py | 12 +- .../policy_templates/writers/plist_writer.py | 16 +- .../format/policy_templates/writers/reg_writer.py | 11 +- .../writers/reg_writer_unittest.py | 12 +- .../writers/xml_formatted_writer.py | 8 +- chromium/tools/grit/grit/format/rc_header.py | 14 +- .../tools/grit/grit/format/rc_header_unittest.py | 34 + chromium/tools/grit/grit/format/repack.py | 22 +- .../grit/grit/format/resource_map_unittest.py | 4 +- chromium/tools/grit/grit/grd_reader.py | 12 +- chromium/tools/grit/grit/grd_reader_unittest.py | 24 + chromium/tools/grit/grit/node/base.py | 105 +- chromium/tools/grit/grit/node/base_unittest.py | 61 + chromium/tools/grit/grit/node/io.py | 13 +- chromium/tools/grit/grit/node/io_unittest.py | 16 + chromium/tools/grit/grit/node/misc.py | 11 +- chromium/tools/grit/grit/test_suite_all.py | 9 + chromium/tools/grit/grit/tool/android2grd.py | 8 +- chromium/tools/grit/grit/tool/build.py | 51 +- chromium/tools/grit/grit/tool/build_unittest.py | 6 +- chromium/tools/grit/grit_info.py | 2 +- chromium/tools/gritsettings/resource_ids | 62 +- .../tools/gtk_clipboard_dump/gtk_clipboard_dump.cc | 85 - .../gtk_clipboard_dump/gtk_clipboard_dump.gyp | 14 - chromium/tools/gyp/AUTHORS | 1 + chromium/tools/gyp/PRESUBMIT.py | 2 - chromium/tools/gyp/buildbot/buildbot_run.py | 45 +- chromium/tools/gyp/gyp_dummy.c | 7 - chromium/tools/gyp/pylib/gyp/MSVSSettings.py | 65 +- chromium/tools/gyp/pylib/gyp/MSVSSettings_test.py | 1 + chromium/tools/gyp/pylib/gyp/MSVSUtil.py | 21 +- chromium/tools/gyp/pylib/gyp/MSVSVersion.py | 8 +- chromium/tools/gyp/pylib/gyp/common.py | 75 + chromium/tools/gyp/pylib/gyp/generator/analyzer.py | 192 + chromium/tools/gyp/pylib/gyp/generator/android.py | 108 +- chromium/tools/gyp/pylib/gyp/generator/cmake.py | 9 +- chromium/tools/gyp/pylib/gyp/generator/eclipse.py | 64 +- chromium/tools/gyp/pylib/gyp/generator/make.py | 26 +- chromium/tools/gyp/pylib/gyp/generator/msvs.py | 184 +- chromium/tools/gyp/pylib/gyp/generator/ninja.py | 348 +- chromium/tools/gyp/pylib/gyp/generator/xcode.py | 16 +- chromium/tools/gyp/pylib/gyp/input.py | 408 +- chromium/tools/gyp/pylib/gyp/mac_tool.py | 6 +- chromium/tools/gyp/pylib/gyp/msvs_emulation.py | 128 +- chromium/tools/gyp/pylib/gyp/ordered_dict.py | 289 + chromium/tools/gyp/pylib/gyp/simple_copy.py | 46 + chromium/tools/gyp/pylib/gyp/win_tool.py | 142 +- chromium/tools/gyp/pylib/gyp/xcode_emulation.py | 376 +- chromium/tools/gyp/pylib/gyp/xcode_ninja.py | 257 + chromium/tools/gyp/pylib/gyp/xcodeproj_file.py | 1 + chromium/tools/gyp/pylintrc | 307 - chromium/tools/gyp/test/analyzer/subdir/subdir.gyp | 19 + chromium/tools/gyp/test/analyzer/test.gyp | 54 + chromium/tools/gyp/test/android/hello.gyp | 15 + chromium/tools/gyp/test/android/make_functions.gyp | 31 + .../tools/gyp/test/android/space_filenames.gyp | 18 + .../gyp/test/compiler-override/compiler-host.gyp | 2 +- .../test/configurations/inheritance/duplicates.gyp | 27 + chromium/tools/gyp/test/cxxflags/cxxflags.gyp | 1 - .../tools/gyp/test/ios/app-bundle/test-archs.gyp | 129 +- .../gyp/test/ios/app-bundle/test-crosscompile.gyp | 47 + chromium/tools/gyp/test/ios/app-bundle/test.gyp | 1 - chromium/tools/gyp/test/link-dependency/test.gyp | 37 + .../gyp/test/mac/archs/test-archs-multiarch.gyp | 32 + .../tools/gyp/test/mac/archs/test-valid-archs.gyp | 28 + chromium/tools/gyp/test/mac/xcode-gcc/test.gyp | 5 - .../gyp/test/mac/xcode-support-actions/test.gyp | 26 + .../ar/make_global_settings_ar.gyp | 29 + .../ld/make_global_settings_ld.gyp | 29 + .../gyp/test/msvs/buildevents/buildevents.gyp | 14 + chromium/tools/gyp/test/msvs/filters/filters.gyp | 47 + .../ninja/normalize-paths-win/normalize-paths.gyp | 12 + .../src/subdir/input-rule-dirname.gyp | 76 +- chromium/tools/gyp/test/rules/src/actions.gyp | 1 + .../tools/gyp/test/rules/src/special-variables.gyp | 1 - .../src/subdir2/both_rule_and_action_input.gyp | 50 + .../commands/repeated_multidir/dir_1/test_1.gyp | 13 + .../commands/repeated_multidir/dir_2/test_2.gyp | 13 + .../variables/commands/repeated_multidir/main.gyp | 16 + .../repeated_multidir/repeated_command_common.gypi | 25 + .../gyp/test/win/command-quote/command-quote.gyp | 5 - .../command-quote/subdir/and/another/in-subdir.gyp | 1 - .../enable-enhanced-instruction-set.gyp | 54 + .../gyp/test/win/idl-excluded/idl-excluded.gyp | 58 + .../win/linker-flags/force-symbol-reference.gyp | 39 + .../test/win/linker-flags/generate-manifest.gyp | 10 + .../gyp/test/win/linker-flags/link-ordering.gyp | 95 + .../tools/gyp/test/win/linker-flags/pdb-output.gyp | 36 + chromium/tools/gyp/test/win/linker-flags/pgo.gyp | 2 +- .../gyp/test/win/linker-flags/program-database.gyp | 7 +- .../tools/gyp/test/win/linker-flags/safeseh.gyp | 47 + .../test/win/linker-flags/unsupported-manifest.gyp | 13 + .../gyp/test/win/linker-flags/warn-as-error.gyp | 66 +- .../tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp | 24 + chromium/tools/gyp/test/win/shard/shard.gyp | 11 + chromium/tools/gyp/test/win/shard/shard_ref.gyp | 41 + .../gyp/test/win/vs-macros/containing-gyp.gyp | 1 - .../gyp/test/win/vs-macros/input-output-macros.gyp | 1 - .../test/win/win-tool/copies_readonly_files.gyp | 29 + chromium/tools/gypv8sh.py | 26 +- chromium/tools/idl_parser/idl_lexer.py | 3 + chromium/tools/idl_parser/idl_node.py | 2 +- chromium/tools/idl_parser/idl_parser.py | 243 +- chromium/tools/idl_parser/idl_ppapi_lexer.py | 5 +- chromium/tools/idl_parser/idl_ppapi_parser.py | 4 +- chromium/tools/idl_parser/test_lexer/keywords.in | 3 + chromium/tools/idl_parser/test_parser/enum_web.idl | 20 +- .../tools/idl_parser/test_parser/interface_web.idl | 28 +- chromium/tools/imagediff/DEPS | 4 - chromium/tools/imagediff/image_diff.cc | 449 - chromium/tools/imagediff/image_diff_png.cc | 650 - chromium/tools/imagediff/image_diff_png.h | 35 - chromium/tools/include_tracer.py | 202 - chromium/tools/ipc_fuzzer/DEPS | 3 - chromium/tools/ipc_fuzzer/OWNERS | 2 - chromium/tools/ipc_fuzzer/ipc_fuzzer.gyp | 2 + chromium/tools/ipc_fuzzer/message_lib/DEPS | 8 - .../tools/ipc_fuzzer/message_lib/all_messages.h | 14 - .../tools/ipc_fuzzer/message_lib/message_cracker.h | 32 - .../tools/ipc_fuzzer/message_lib/message_file.h | 27 - .../ipc_fuzzer/message_lib/message_file_format.h | 63 - .../ipc_fuzzer/message_lib/message_file_reader.cc | 230 - .../ipc_fuzzer/message_lib/message_file_writer.cc | 176 - .../tools/ipc_fuzzer/message_lib/message_lib.gyp | 9 +- .../tools/ipc_fuzzer/message_lib/message_names.cc | 37 - .../tools/ipc_fuzzer/message_lib/message_names.h | 59 - chromium/tools/ipc_fuzzer/mutate/mutate.cc | 10 - chromium/tools/ipc_fuzzer/mutate/mutate.gyp | 81 +- chromium/tools/ipc_fuzzer/play_testcase.py | 86 - chromium/tools/ipc_fuzzer/replay/DEPS | 3 - chromium/tools/ipc_fuzzer/replay/replay.cc | 20 - chromium/tools/ipc_fuzzer/replay/replay.gyp | 6 +- chromium/tools/ipc_fuzzer/replay/replay_process.cc | 106 - chromium/tools/ipc_fuzzer/replay/replay_process.h | 59 - chromium/tools/ipc_messages_log.py | 168 - chromium/tools/json_schema_compiler/BUILD.gn | 13 + .../tools/json_schema_compiler/cc_generator.py | 263 +- chromium/tools/json_schema_compiler/compiler.py | 45 +- .../json_schema_compiler/cpp_bundle_generator.py | 22 +- .../json_schema_compiler/cpp_type_generator.py | 30 +- chromium/tools/json_schema_compiler/cpp_util.py | 8 + .../json_schema_compiler/dart_generator_test.py | 2 +- .../json_schema_compiler/dart_test/comments.dart | 2 +- .../dart_test/dictionaries.dart | 2 +- .../dart_test/empty_namespace.dart | 2 +- .../json_schema_compiler/dart_test/empty_type.dart | 2 +- .../json_schema_compiler/dart_test/events.dart | 2 +- .../json_schema_compiler/dart_test/functions.dart | 2 +- .../dart_test/operatable_type.dart | 2 +- .../tools/json_schema_compiler/dart_test/tags.dart | 2 +- chromium/tools/json_schema_compiler/h_generator.py | 29 +- chromium/tools/json_schema_compiler/idl_schema.py | 53 +- .../tools/json_schema_compiler/idl_schema_test.py | 219 +- chromium/tools/json_schema_compiler/model.py | 20 + chromium/tools/json_schema_compiler/model_test.py | 15 + .../tools/json_schema_compiler/schema_loader.py | 10 +- .../test/json_schema_compiler_tests.gyp | 2 + chromium/tools/json_schema_compiler/util.cc | 18 +- chromium/tools/json_schema_compiler/util.h | 2 +- .../tools/json_schema_compiler/util_cc_helper.py | 42 +- chromium/tools/json_to_struct/PRESUBMIT.py | 20 - chromium/tools/json_to_struct/element_generator.py | 122 - .../tools/json_to_struct/element_generator_test.py | 160 - chromium/tools/json_to_struct/json_to_struct.py | 211 - chromium/tools/json_to_struct/struct_generator.py | 43 - .../tools/json_to_struct/struct_generator_test.py | 58 - chromium/tools/licenses.py | 470 - chromium/tools/linux/PRESUBMIT.py | 45 - chromium/tools/linux/dump-static-initializers.py | 231 - chromium/tools/linux/procfs.py | 729 - chromium/tools/lsan/PRESUBMIT.py | 36 - chromium/tools/lsan/suppressions.txt | 113 - chromium/tools/mac/dump-static-initializers.py | 69 - chromium/tools/mac/symbolicate_crash.py | 504 - .../measure_page_load_time/ff_ext/chrome.manifest | 2 - .../ff_ext/content/firefoxOverlay.xul | 7 - .../ff_ext/content/measure_page_load_time.js | 209 - .../measure_page_load_time/ff_ext/install.rdf | 17 - .../ie_bho/MeasurePageLoadTime.cpp | 72 - .../ie_bho/MeasurePageLoadTime.def | 9 - .../ie_bho/MeasurePageLoadTime.idl | 40 - .../ie_bho/MeasurePageLoadTime.rc | 121 - .../ie_bho/MeasurePageLoadTime.rgs | 29 - .../ie_bho/MeasurePageLoadTime.vcproj | 320 - .../ie_bho/MeasurePageLoadTimeBHO.cpp | 292 - .../ie_bho/MeasurePageLoadTimeBHO.h | 87 - .../ie_bho/MeasurePageLoadTimeBHO.rgs | 27 - .../tools/measure_page_load_time/ie_bho/resource.h | 18 - chromium/tools/memory_watcher/DEPS | 3 - chromium/tools/memory_watcher/README | 17 - chromium/tools/memory_watcher/call_stack.cc | 399 - chromium/tools/memory_watcher/call_stack.h | 168 - chromium/tools/memory_watcher/dllmain.cc | 155 - chromium/tools/memory_watcher/hotkey.h | 48 - chromium/tools/memory_watcher/ia32_modrm_map.cc | 94 - chromium/tools/memory_watcher/ia32_opcode_map.cc | 1161 - chromium/tools/memory_watcher/memory_hook.cc | 562 - chromium/tools/memory_watcher/memory_hook.h | 153 - chromium/tools/memory_watcher/memory_watcher.cc | 255 - chromium/tools/memory_watcher/memory_watcher.gyp | 48 - chromium/tools/memory_watcher/memory_watcher.h | 95 - chromium/tools/memory_watcher/mini_disassembler.cc | 392 - chromium/tools/memory_watcher/mini_disassembler.h | 163 - .../tools/memory_watcher/mini_disassembler_types.h | 199 - chromium/tools/memory_watcher/preamble_patcher.cc | 228 - chromium/tools/memory_watcher/preamble_patcher.h | 293 - .../memory_watcher/preamble_patcher_with_stub.cc | 174 - chromium/tools/memory_watcher/scripts/finditem.pl | 56 - chromium/tools/memory_watcher/scripts/memprof.pl | 116 - chromium/tools/memory_watcher/scripts/memtrace.pl | 146 - chromium/tools/memory_watcher/scripts/summary.pl | 154 - chromium/tools/metrics/OWNERS | 10 - chromium/tools/metrics/actions/OWNERS | 2 - chromium/tools/metrics/actions/chromeactions.txt | 1878 -- chromium/tools/metrics/actions/extract_actions.py | 636 - chromium/tools/metrics/actions/extract_actions.sh | 13 - chromium/tools/metrics/histograms/PRESUBMIT.py | 39 - chromium/tools/metrics/histograms/diffutil.py | 47 - .../tools/metrics/histograms/extract_histograms.py | 421 - .../metrics/histograms/find_unmapped_histograms.py | 227 - chromium/tools/metrics/histograms/histograms.xml | 33764 ------------------- chromium/tools/metrics/histograms/pretty_print.py | 358 - .../histograms/update_extension_functions.py | 148 - .../tools/metrics/histograms/update_policies.py | 133 - .../tools/metrics/histograms/validate_format.py | 20 - chromium/tools/multi-process-rss.py | 143 - chromium/tools/nocompile_driver.py | 472 - chromium/tools/omahaproxy.py | 90 - chromium/tools/oopif/OWNERS | 4 - chromium/tools/oopif/iframe_server.py | 224 - chromium/tools/prepare-bisect-perf-regression.py | 70 - chromium/tools/python/google/__init__.py | 1 - chromium/tools/python/google/gethash_timer.py | 149 - .../tools/python/google/httpd_config/httpd.conf | 734 - .../tools/python/google/httpd_config/httpd2.conf | 280 - .../tools/python/google/httpd_config/httpd2.pem | 110 - .../python/google/httpd_config/httpd2_linux.conf | 144 - .../python/google/httpd_config/httpd2_mac.conf | 229 - .../tools/python/google/httpd_config/mime.types | 599 - .../python/google/httpd_config/root_ca_cert.pem | 102 - chromium/tools/python/google/httpd_utils.py | 200 - chromium/tools/python/google/logging_utils.py | 82 - chromium/tools/python/google/path_utils.py | 84 - chromium/tools/python/google/platform_utils.py | 23 - .../tools/python/google/platform_utils_linux.py | 148 - chromium/tools/python/google/platform_utils_mac.py | 145 - chromium/tools/python/google/platform_utils_win.py | 194 - chromium/tools/python/google/process_utils.py | 221 - .../tools/relocation_packer/relocation_packer.gyp | 66 + chromium/tools/resources/find_unused_resources.py | 194 - chromium/tools/resources/optimize-png-files.sh | 472 - chromium/tools/run-bisect-manual-test.py | 128 - chromium/tools/run-bisect-perf-regression.cfg | 88 - chromium/tools/run-bisect-perf-regression.py | 424 - chromium/tools/run-perf-test.cfg | 77 - chromium/tools/safely-roll-blink.py | 127 - chromium/tools/set_default_handler/DEPS | 4 - .../set_default_handler/set_default_handler.gyp | 5 +- .../set_default_handler_main.cc | 67 - chromium/tools/site_compare/command_line.py | 802 - chromium/tools/site_compare/commands/__init__.py | 0 chromium/tools/site_compare/commands/compare2.py | 170 - chromium/tools/site_compare/commands/maskmaker.py | 272 - chromium/tools/site_compare/commands/measure.py | 52 - chromium/tools/site_compare/commands/scrape.py | 59 - chromium/tools/site_compare/commands/timeload.py | 144 - chromium/tools/site_compare/drivers/__init__.py | 13 - .../tools/site_compare/drivers/win32/__init__.py | 0 .../tools/site_compare/drivers/win32/keyboard.py | 201 - chromium/tools/site_compare/drivers/win32/mouse.py | 222 - .../tools/site_compare/drivers/win32/windowing.py | 366 - chromium/tools/site_compare/operators/__init__.py | 23 - chromium/tools/site_compare/operators/equals.py | 37 - .../site_compare/operators/equals_with_mask.py | 57 - chromium/tools/site_compare/scrapers/__init__.py | 33 - .../tools/site_compare/scrapers/chrome/__init__.py | 36 - .../site_compare/scrapers/chrome/chrome011010.py | 42 - .../site_compare/scrapers/chrome/chrome01970.py | 42 - .../site_compare/scrapers/chrome/chromebase.py | 199 - .../site_compare/scrapers/firefox/__init__.py | 28 - .../site_compare/scrapers/firefox/firefox2.py | 249 - .../tools/site_compare/scrapers/ie/__init__.py | 28 - chromium/tools/site_compare/scrapers/ie/ie7.py | 210 - chromium/tools/site_compare/site_compare.py | 176 - chromium/tools/site_compare/utils/__init__.py | 0 .../tools/site_compare/utils/browser_iterate.py | 199 - chromium/tools/sort-headers.py | 185 - chromium/tools/stats_viewer/OpenDialog.Designer.cs | 88 - chromium/tools/stats_viewer/OpenDialog.cs | 45 - chromium/tools/stats_viewer/OpenDialog.resx | 120 - .../tools/stats_viewer/Properties/AssemblyInfo.cs | 33 - .../stats_viewer/Properties/Resources.Designer.cs | 71 - .../tools/stats_viewer/Properties/Resources.resx | 117 - .../stats_viewer/Properties/Settings.Designer.cs | 30 - .../stats_viewer/Properties/Settings.settings | 7 - chromium/tools/stats_viewer/Resources.Designer.cs | 77 - chromium/tools/stats_viewer/Resources.resx | 127 - chromium/tools/stats_viewer/Resources/kitten.png | Bin 36163 -> 0 bytes .../stats_viewer/Resources/kittenbackground.png | Bin 1275 -> 0 bytes chromium/tools/stats_viewer/program.cs | 23 - chromium/tools/stats_viewer/stats_table.cs | 546 - .../tools/stats_viewer/stats_viewer.Designer.cs | 392 - chromium/tools/stats_viewer/stats_viewer.cs | 510 - chromium/tools/stats_viewer/stats_viewer.csproj | 107 - chromium/tools/stats_viewer/stats_viewer.resx | 1129 - chromium/tools/stats_viewer/win32.cs | 50 - .../example/payload/hello_world.isolate | 49 + .../isolate_test_cases/gtest_fake_pass.isolate | 13 + .../tests/isolate/all_items_invalid.isolate | 25 + .../swarming_client/tests/isolate/fail.isolate | 18 + .../tests/isolate/missing_trailing_slash.isolate | 11 + .../swarming_client/tests/isolate/no_run.isolate | 14 + .../tests/isolate/non_existent.isolate | 10 + .../swarming_client/tests/isolate/simple.isolate | 18 + .../swarming_client/tests/isolate/split.isolate | 16 + .../tests/isolate/symlink_full.isolate | 21 + .../isolate/symlink_outside_build_root.isolate | 21 + .../tests/isolate/symlink_partial.isolate | 21 + .../tests/isolate/touch_only.isolate | 18 + .../tests/isolate/touch_root.isolate | 19 + .../tests/isolate/with_flag.isolate | 22 + chromium/tools/swig/swig.py | 45 - chromium/tools/symsrc/COPYING-pefile | 27 - chromium/tools/symsrc/README.chromium | 14 - chromium/tools/symsrc/img_fingerprint.py | 34 - chromium/tools/symsrc/pdb_fingerprint_from_img.py | 64 - chromium/tools/symsrc/pefile.py | 3729 -- chromium/tools/symsrc/source_index.py | 226 - chromium/tools/sync-webkit-git.py | 221 - chromium/tools/tcmalloc/print-live-objects.py | 91 - chromium/tools/telemetry/telemetry.gyp | 16 + chromium/tools/trace/trace.html | 287 - chromium/tools/trace/trace_data.js | 1050 - chromium/tools/traceline/svgui/README | 12 - .../tools/traceline/svgui/startup-release.json | 178 - chromium/tools/traceline/svgui/traceline.css | 73 - chromium/tools/traceline/svgui/traceline.js | 693 - chromium/tools/traceline/svgui/traceline.xml | 11 - chromium/tools/traceline/traceline/Makefile | 30 - chromium/tools/traceline/traceline/README | 21 - chromium/tools/traceline/traceline/assembler.h | 576 - .../traceline/traceline/assembler_unittest.cc | 83 - .../traceline/traceline/assembler_unittest.sh | 7 - .../traceline/assembler_unittest.sh.expected | 54 - .../traceline/traceline/dump_syscalls_idarub.rb | 32 - chromium/tools/traceline/traceline/logging.h | 28 - chromium/tools/traceline/traceline/main.cc | 1339 - chromium/tools/traceline/traceline/rdtsc.h | 43 - .../tools/traceline/traceline/scripts/__init__.py | 0 .../tools/traceline/traceline/scripts/alloc.py | 27 - .../tools/traceline/traceline/scripts/crit_sec.js | 87 - .../tools/traceline/traceline/scripts/crit_sec.py | 57 - .../traceline/traceline/scripts/filter_short.py | 34 - .../traceline/traceline/scripts/filter_split.sh | 14 - chromium/tools/traceline/traceline/scripts/heap.js | 69 - .../tools/traceline/traceline/scripts/scstats.py | 32 - .../tools/traceline/traceline/scripts/split.py | 31 - .../tools/traceline/traceline/scripts/syscalls.py | 942 - .../traceline/traceline/sidestep/ia32_modrm_map.cc | 92 - .../traceline/sidestep/ia32_opcode_map.cc | 1159 - .../traceline/sidestep/mini_disassembler.cc | 416 - .../traceline/sidestep/mini_disassembler.h | 156 - .../traceline/sidestep/mini_disassembler_types.h | 197 - chromium/tools/traceline/traceline/stubs.asm | 132 - chromium/tools/traceline/traceline/sym_resolver.h | 167 - chromium/tools/traceline/traceline/syscall_map.h | 2116 -- chromium/tools/unused-symbols-report.py | 171 - chromium/tools/update_reference_build.py | 335 - chromium/tools/usb_ids/usb_ids.py | 110 - chromium/tools/valgrind/OWNERS | 5 - chromium/tools/valgrind/asan/asan_symbolize.py | 49 - chromium/tools/valgrind/asan/asan_wrapper.sh | 16 - .../valgrind/asan/third_party/README.chromium | 6 - .../tools/valgrind/asan/third_party/__init__.py | 0 .../valgrind/asan/third_party/asan_symbolize.py | 365 - chromium/tools/valgrind/browser_wrapper_win.py | 49 - chromium/tools/valgrind/chrome_tests.bat | 70 - chromium/tools/valgrind/chrome_tests.py | 652 - chromium/tools/valgrind/chrome_tests.sh | 122 - chromium/tools/valgrind/common.py | 252 - chromium/tools/valgrind/drmemory.bat | 5 - chromium/tools/valgrind/drmemory/OWNERS | 1 - chromium/tools/valgrind/drmemory/PRESUBMIT.py | 35 - chromium/tools/valgrind/drmemory/suppressions.txt | 430 - .../tools/valgrind/drmemory/suppressions_full.txt | 1337 - chromium/tools/valgrind/drmemory_analyze.py | 193 - chromium/tools/valgrind/gdb_helper.py | 87 - chromium/tools/valgrind/gtest_exclude/OWNERS | 1 - .../base_unittests.gtest-drmemory_win32.txt | 26 - .../gtest_exclude/base_unittests.gtest-tsan.txt | 10 - .../base_unittests.gtest-tsan_win32.txt | 28 - .../gtest_exclude/base_unittests.gtest.txt | 26 - .../gtest_exclude/base_unittests.gtest_mac.txt | 20 - .../gtest_exclude/base_unittests.gtest_win-8.txt | 2 - .../gtest_exclude/base_unittests.gtest_win32.txt | 12 - .../browser_tests.gtest-drmemory_win32.txt | 56 - .../gtest_exclude/browser_tests.gtest-memcheck.txt | 60 - .../components_unittests.gtest-tsan_win32.txt | 6 - .../gtest_exclude/content_unittests.gtest-tsan.txt | 2 - .../gtest_exclude/content_unittests.gtest.txt | 5 - .../gtest_exclude/content_unittests.gtest_mac.txt | 58 - .../crypto_unittests.gtest-tsan_win32.txt | 2 - .../gtest_exclude/interactive_ui_tests.gtest.txt | 34 - .../ipc_tests.gtest-drmemory_win32.txt | 2 - .../gtest_exclude/ipc_tests.gtest-tsan_win32.txt | 2 - .../valgrind/gtest_exclude/ipc_tests.gtest.txt | 6 - .../media_unittests.gtest-drmemory_win32.txt | 4 - .../media_unittests.gtest-tsan_win32.txt | 3 - .../gtest_exclude/media_unittests.gtest.txt | 6 - .../message_center_unittests.gtest.txt | 3 - .../net_unittests.gtest-drmemory_win-xp.txt | 3 - .../net_unittests.gtest-drmemory_win32.txt | 24 - .../gtest_exclude/net_unittests.gtest-memcheck.txt | 26 - .../gtest_exclude/net_unittests.gtest-tsan.txt | 27 - .../net_unittests.gtest-tsan_win32.txt | 40 - .../valgrind/gtest_exclude/net_unittests.gtest.txt | 21 - .../gtest_exclude/net_unittests.gtest_linux.txt | 5 - .../gtest_exclude/net_unittests.gtest_mac.txt | 6 - .../printing_unittests.gtest-drmemory_win32.txt | 3 - .../remoting_unittests.gtest-drmemory_win32.txt | 9 - .../remoting_unittests.gtest-tsan_win32.txt | 2 - .../gtest_exclude/remoting_unittests.gtest.txt | 2 - .../remoting_unittests.gtest_win-8.txt | 2 - .../safe_browsing_tests.gtest_mac.txt | 2 - .../tools/valgrind/gtest_exclude/suppressions.txt | 39 - .../gtest_exclude/sync_unit_tests.gtest-asan.txt | 2 - .../gtest_exclude/sync_unit_tests.gtest-tsan.txt | 5 - .../gtest_exclude/ui_unittests.gtest-memcheck.txt | 2 - .../gtest_exclude/ui_unittests.gtest-tsan.txt | 2 - .../unit_tests.gtest-drmemory_win-xp.txt | 7 - .../unit_tests.gtest-drmemory_win32.txt | 76 - .../gtest_exclude/unit_tests.gtest-memcheck.txt | 19 - .../gtest_exclude/unit_tests.gtest-tsan.txt | 12 - .../valgrind/gtest_exclude/unit_tests.gtest.txt | 34 - .../gtest_exclude/unit_tests.gtest_linux.txt | 31 - .../gtest_exclude/unit_tests.gtest_mac.txt | 39 - chromium/tools/valgrind/locate_valgrind.sh | 77 - chromium/tools/valgrind/memcheck/OWNERS | 1 - chromium/tools/valgrind/memcheck/PRESUBMIT.py | 81 - chromium/tools/valgrind/memcheck/suppressions.txt | 6359 ---- .../tools/valgrind/memcheck/suppressions_linux.txt | 24 - .../tools/valgrind/memcheck/suppressions_mac.txt | 2378 -- chromium/tools/valgrind/memcheck_analyze.py | 634 - chromium/tools/valgrind/regrind.sh | 138 - chromium/tools/valgrind/reliability/url_list.txt | 11 - chromium/tools/valgrind/scan-build.py | 227 - chromium/tools/valgrind/suppressions.py | 1018 - chromium/tools/valgrind/test_suppressions.py | 182 - chromium/tools/valgrind/tsan/OWNERS | 1 - chromium/tools/valgrind/tsan/PRESUBMIT.py | 35 - chromium/tools/valgrind/tsan/ignores.txt | 189 - chromium/tools/valgrind/tsan/ignores_win32.txt | 64 - chromium/tools/valgrind/tsan/suppressions.txt | 1141 - .../tools/valgrind/tsan/suppressions_win32.txt | 321 - chromium/tools/valgrind/tsan_analyze.py | 271 - chromium/tools/valgrind/tsan_v2/ignores.txt | 12 - chromium/tools/valgrind/tsan_v2/suppressions.txt | 137 - chromium/tools/valgrind/unused_suppressions.py | 24 - chromium/tools/valgrind/valgrind.sh | 124 - chromium/tools/valgrind/valgrind_test.py | 1235 - chromium/tools/valgrind/waterfall.sh | 222 - chromium/tools/vim/chromium.ycm_extra_conf.py | 203 - chromium/tools/vim/filetypes.vim | 9 - chromium/tools/vim/ninja-build.vim | 129 - .../static_initializers/static_initializers.gyp | 28 + chromium/tools/win/toolchain/7z/7z.dll | Bin 1422336 -> 0 bytes chromium/tools/win/toolchain/7z/7z.exe | Bin 284160 -> 0 bytes chromium/tools/win/toolchain/7z/LICENSE | 57 - .../win/toolchain/get_toolchain_if_necessary.py | 138 - chromium/tools/win/toolchain/toolchain.py | 714 - chromium/tools/win/toolchain/toolchain2013.py | 229 - chromium/tools/xdisplaycheck/xdisplaycheck.cc | 115 - 666 files changed, 10634 insertions(+), 124675 deletions(-) delete mode 100644 chromium/tools/DEPS delete mode 100644 chromium/tools/OWNERS delete mode 100644 chromium/tools/PRESUBMIT.py create mode 100644 chromium/tools/android/file_poller/file_poller.gyp create mode 100644 chromium/tools/android/ps_ext/ps_ext.gyp create mode 100644 chromium/tools/android/run_pie/run_pie.gyp delete mode 100644 chromium/tools/bash-completion delete mode 100755 chromium/tools/bisect-builds.py delete mode 100755 chromium/tools/bisect-manual-test.py delete mode 100755 chromium/tools/bisect-perf-regression.py delete mode 100644 chromium/tools/bisect_test.py delete mode 100644 chromium/tools/bisect_utils.py delete mode 100755 chromium/tools/check_ecs_deps/check_ecs_deps.py delete mode 100755 chromium/tools/checkbins/checkbins.py delete mode 100644 chromium/tools/checkdeps/DEPS delete mode 100644 chromium/tools/checkdeps/PRESUBMIT.py delete mode 100755 chromium/tools/checkdeps/builddeps.py delete mode 100755 chromium/tools/checkdeps/checkdeps.py delete mode 100755 chromium/tools/checkdeps/checkdeps_test.py delete mode 100644 chromium/tools/checkdeps/cpp_checker.py delete mode 100755 chromium/tools/checkdeps/graphdeps.py delete mode 100644 chromium/tools/checkdeps/java_checker.py delete mode 100644 chromium/tools/checkdeps/results.py delete mode 100644 chromium/tools/checkdeps/rules.py delete mode 100644 chromium/tools/checklicenses/OWNERS delete mode 100755 chromium/tools/checklicenses/checklicenses.py delete mode 100644 chromium/tools/checkperms/OWNERS delete mode 100644 chromium/tools/checkperms/PRESUBMIT.py delete mode 100755 chromium/tools/checkperms/checkperms.py create mode 100644 chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp create mode 100644 chromium/tools/clang/blink_gc_plugin/Config.h create mode 100644 chromium/tools/clang/blink_gc_plugin/Edge.cpp create mode 100644 chromium/tools/clang/blink_gc_plugin/Edge.h create mode 100644 chromium/tools/clang/blink_gc_plugin/JsonWriter.h create mode 100644 chromium/tools/clang/blink_gc_plugin/Makefile create mode 100644 chromium/tools/clang/blink_gc_plugin/NeedsTracing.h create mode 100644 chromium/tools/clang/blink_gc_plugin/OWNERS create mode 100644 chromium/tools/clang/blink_gc_plugin/README.chromium create mode 100644 chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp create mode 100644 chromium/tools/clang/blink_gc_plugin/RecordInfo.h create mode 100644 chromium/tools/clang/blink_gc_plugin/TracingStatus.h create mode 100755 chromium/tools/clang/blink_gc_plugin/process-graph.py delete mode 100644 chromium/tools/clang/plugins/FindBadConstructs.cpp create mode 100644 chromium/tools/clang/plugins/FindBadConstructsAction.cpp create mode 100644 chromium/tools/clang/plugins/FindBadConstructsAction.h create mode 100644 chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp create mode 100644 chromium/tools/clang/plugins/FindBadConstructsConsumer.h create mode 100644 chromium/tools/clang/plugins/Options.h create mode 100755 chromium/tools/clang/scripts/blink_gc_plugin_flags.sh create mode 100755 chromium/tools/clang/scripts/repackage.sh delete mode 100644 chromium/tools/code_coverage/croc.css delete mode 100755 chromium/tools/code_coverage/croc.py delete mode 100644 chromium/tools/code_coverage/croc_html.py delete mode 100644 chromium/tools/code_coverage/croc_scan.py delete mode 100755 chromium/tools/code_coverage/croc_scan_test.py delete mode 100755 chromium/tools/code_coverage/croc_test.py delete mode 100644 chromium/tools/code_coverage/example.croc delete mode 100644 chromium/tools/code_coverage/third_party/README.chromium delete mode 100644 chromium/tools/code_coverage/third_party/sorttable.js delete mode 100755 chromium/tools/compile_test/compile_test.py delete mode 100755 chromium/tools/coverity/coverity.py delete mode 100644 chromium/tools/cr/OWNERS delete mode 100644 chromium/tools/cr/README delete mode 100755 chromium/tools/cr/cr-bash-helpers.sh delete mode 100755 chromium/tools/cr/cr.sh delete mode 100644 chromium/tools/cr/cr/__init__.py delete mode 100644 chromium/tools/cr/cr/actions/__init__.py delete mode 100644 chromium/tools/cr/cr/actions/action.py delete mode 100644 chromium/tools/cr/cr/actions/adb.py delete mode 100644 chromium/tools/cr/cr/actions/builder.py delete mode 100644 chromium/tools/cr/cr/actions/debugger.py delete mode 100644 chromium/tools/cr/cr/actions/gdb.py delete mode 100644 chromium/tools/cr/cr/actions/gyp.py delete mode 100644 chromium/tools/cr/cr/actions/installer.py delete mode 100644 chromium/tools/cr/cr/actions/linux.py delete mode 100644 chromium/tools/cr/cr/actions/ninja.py delete mode 100644 chromium/tools/cr/cr/actions/runner.py delete mode 100644 chromium/tools/cr/cr/auto/__init__.py delete mode 100644 chromium/tools/cr/cr/auto/build/__init__.py delete mode 100644 chromium/tools/cr/cr/auto/client/__init__.py delete mode 100644 chromium/tools/cr/cr/auto/user/__init__.py delete mode 100644 chromium/tools/cr/cr/autocomplete.py delete mode 100644 chromium/tools/cr/cr/base/__init__.py delete mode 100644 chromium/tools/cr/cr/base/android.py delete mode 100644 chromium/tools/cr/cr/base/arch.py delete mode 100644 chromium/tools/cr/cr/base/buildtype.py delete mode 100644 chromium/tools/cr/cr/base/client.py delete mode 100644 chromium/tools/cr/cr/base/host.py delete mode 100644 chromium/tools/cr/cr/base/linux.py delete mode 100644 chromium/tools/cr/cr/base/platform.py delete mode 100644 chromium/tools/cr/cr/commands/__init__.py delete mode 100644 chromium/tools/cr/cr/commands/build.py delete mode 100644 chromium/tools/cr/cr/commands/command.py delete mode 100644 chromium/tools/cr/cr/commands/debug.py delete mode 100644 chromium/tools/cr/cr/commands/info.py delete mode 100644 chromium/tools/cr/cr/commands/init.py delete mode 100644 chromium/tools/cr/cr/commands/install.py delete mode 100644 chromium/tools/cr/cr/commands/prepare.py delete mode 100644 chromium/tools/cr/cr/commands/run.py delete mode 100644 chromium/tools/cr/cr/commands/select.py delete mode 100644 chromium/tools/cr/cr/commands/shell.py delete mode 100644 chromium/tools/cr/cr/commands/sync.py delete mode 100644 chromium/tools/cr/cr/config.py delete mode 100644 chromium/tools/cr/cr/context.py delete mode 100644 chromium/tools/cr/cr/fixups/__init__.py delete mode 100644 chromium/tools/cr/cr/fixups/arch.py delete mode 100644 chromium/tools/cr/cr/loader.py delete mode 100644 chromium/tools/cr/cr/plugin.py delete mode 100644 chromium/tools/cr/cr/targets/__init__.py delete mode 100644 chromium/tools/cr/cr/targets/chrome.py delete mode 100644 chromium/tools/cr/cr/targets/chromium_testshell.py delete mode 100644 chromium/tools/cr/cr/targets/content_shell.py delete mode 100644 chromium/tools/cr/cr/targets/target.py delete mode 100644 chromium/tools/cr/cr/visitor.py delete mode 100644 chromium/tools/cr/main.py delete mode 100644 chromium/tools/crx_id/PRESUBMIT.py delete mode 100644 chromium/tools/crx_id/__init__.py delete mode 100755 chromium/tools/crx_id/crx_id.py delete mode 100755 chromium/tools/crx_id/crx_id_unittest.py delete mode 100644 chromium/tools/crx_id/jebgalgnebhfojomionfpkfelancnnkf.crx delete mode 100644 chromium/tools/cygprofile/cygprofile.cc delete mode 100755 chromium/tools/cygprofile/mergetraces.py delete mode 100755 chromium/tools/cygprofile/patch_orderfile.py delete mode 100755 chromium/tools/cygprofile/symbolize.py delete mode 100644 chromium/tools/deps2git/PRESUBMIT.py delete mode 100644 chromium/tools/deps2git/WATCHLISTS delete mode 100644 chromium/tools/deps2git/codereview.settings delete mode 100755 chromium/tools/deps2git/deps2git.py delete mode 100644 chromium/tools/deps2git/deps2submodules.py delete mode 100755 chromium/tools/deps2git/deps2submodules_unittest.py delete mode 100644 chromium/tools/deps2git/deps_utils.py delete mode 100644 chromium/tools/deps2git/git_tools.py delete mode 100755 chromium/tools/deps2git/svn_to_git_public.py delete mode 100755 chromium/tools/diagnose-me.py delete mode 100755 chromium/tools/dromaeo_benchmark_runner/dromaeo_benchmark_runner.py delete mode 100644 chromium/tools/emacs/chrome-filetypes.el delete mode 100644 chromium/tools/emacs/flymake-chromium.el delete mode 100644 chromium/tools/emacs/trybot-linux.txt delete mode 100644 chromium/tools/emacs/trybot-mac.txt delete mode 100644 chromium/tools/emacs/trybot-windows.txt delete mode 100644 chromium/tools/emacs/trybot.el delete mode 100755 chromium/tools/export_tarball/export_tarball.py delete mode 100755 chromium/tools/export_tarball/export_v8_tarball.py delete mode 100644 chromium/tools/find_depot_tools.py delete mode 100644 chromium/tools/find_runtime_symbols/OWNERS delete mode 100644 chromium/tools/find_runtime_symbols/PRESUBMIT.py delete mode 100644 chromium/tools/find_runtime_symbols/README delete mode 100755 chromium/tools/find_runtime_symbols/find_runtime_symbols.py delete mode 100755 chromium/tools/find_runtime_symbols/prepare_symbol_info.py delete mode 100755 chromium/tools/find_runtime_symbols/reduce_debugline.py delete mode 100644 chromium/tools/find_runtime_symbols/static_symbols.py delete mode 100755 chromium/tools/flakiness/find_flakiness.py delete mode 100644 chromium/tools/gdb/gdb_chrome.py delete mode 100755 chromium/tools/gen_keyboard_overlay_data/gen_keyboard_overlay_data.py delete mode 100644 chromium/tools/git/README delete mode 100755 chromium/tools/git/for-all-touched-files.py delete mode 100755 chromium/tools/git/git-diff-ide.py delete mode 100755 chromium/tools/git/git-utils.sh delete mode 100755 chromium/tools/git/graph.sh delete mode 100755 chromium/tools/git/mass-rename.py delete mode 100755 chromium/tools/git/mass-rename.sh delete mode 100755 chromium/tools/git/mffr.py delete mode 100755 chromium/tools/git/move_source_file.bat delete mode 100755 chromium/tools/git/move_source_file.py delete mode 100755 chromium/tools/git/post-checkout delete mode 100755 chromium/tools/git/post-merge delete mode 100755 chromium/tools/git/update-copyrights.sh create mode 100644 chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer.py create mode 100644 chromium/tools/grit/grit/format/policy_templates/writers/ios_plist_writer_unittest.py delete mode 100644 chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.cc delete mode 100644 chromium/tools/gtk_clipboard_dump/gtk_clipboard_dump.gyp delete mode 100644 chromium/tools/gyp/gyp_dummy.c create mode 100644 chromium/tools/gyp/pylib/gyp/generator/analyzer.py create mode 100644 chromium/tools/gyp/pylib/gyp/ordered_dict.py create mode 100644 chromium/tools/gyp/pylib/gyp/simple_copy.py create mode 100644 chromium/tools/gyp/pylib/gyp/xcode_ninja.py delete mode 100644 chromium/tools/gyp/pylintrc create mode 100644 chromium/tools/gyp/test/analyzer/subdir/subdir.gyp create mode 100644 chromium/tools/gyp/test/analyzer/test.gyp create mode 100644 chromium/tools/gyp/test/android/hello.gyp create mode 100644 chromium/tools/gyp/test/android/make_functions.gyp create mode 100644 chromium/tools/gyp/test/android/space_filenames.gyp create mode 100644 chromium/tools/gyp/test/configurations/inheritance/duplicates.gyp create mode 100644 chromium/tools/gyp/test/ios/app-bundle/test-crosscompile.gyp create mode 100644 chromium/tools/gyp/test/link-dependency/test.gyp create mode 100644 chromium/tools/gyp/test/mac/archs/test-valid-archs.gyp create mode 100644 chromium/tools/gyp/test/mac/xcode-support-actions/test.gyp create mode 100644 chromium/tools/gyp/test/make_global_settings/ar/make_global_settings_ar.gyp create mode 100644 chromium/tools/gyp/test/make_global_settings/ld/make_global_settings_ld.gyp create mode 100644 chromium/tools/gyp/test/msvs/buildevents/buildevents.gyp create mode 100644 chromium/tools/gyp/test/msvs/filters/filters.gyp create mode 100644 chromium/tools/gyp/test/rules/src/subdir2/both_rule_and_action_input.gyp create mode 100644 chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_1/test_1.gyp create mode 100644 chromium/tools/gyp/test/variables/commands/repeated_multidir/dir_2/test_2.gyp create mode 100644 chromium/tools/gyp/test/variables/commands/repeated_multidir/main.gyp create mode 100644 chromium/tools/gyp/test/variables/commands/repeated_multidir/repeated_command_common.gypi create mode 100644 chromium/tools/gyp/test/win/compiler-flags/enable-enhanced-instruction-set.gyp create mode 100644 chromium/tools/gyp/test/win/idl-excluded/idl-excluded.gyp create mode 100644 chromium/tools/gyp/test/win/linker-flags/force-symbol-reference.gyp create mode 100644 chromium/tools/gyp/test/win/linker-flags/link-ordering.gyp create mode 100644 chromium/tools/gyp/test/win/linker-flags/pdb-output.gyp create mode 100644 chromium/tools/gyp/test/win/linker-flags/safeseh.gyp create mode 100644 chromium/tools/gyp/test/win/linker-flags/unsupported-manifest.gyp create mode 100644 chromium/tools/gyp/test/win/ml-safeseh/ml-safeseh.gyp create mode 100644 chromium/tools/gyp/test/win/shard/shard_ref.gyp create mode 100644 chromium/tools/gyp/test/win/win-tool/copies_readonly_files.gyp delete mode 100644 chromium/tools/imagediff/DEPS delete mode 100644 chromium/tools/imagediff/image_diff.cc delete mode 100644 chromium/tools/imagediff/image_diff_png.cc delete mode 100644 chromium/tools/imagediff/image_diff_png.h delete mode 100755 chromium/tools/include_tracer.py delete mode 100644 chromium/tools/ipc_fuzzer/DEPS delete mode 100644 chromium/tools/ipc_fuzzer/OWNERS delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/DEPS delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/all_messages.h delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_cracker.h delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_file.h delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_file_format.h delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_file_reader.cc delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_file_writer.cc delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_names.cc delete mode 100644 chromium/tools/ipc_fuzzer/message_lib/message_names.h delete mode 100644 chromium/tools/ipc_fuzzer/mutate/mutate.cc delete mode 100755 chromium/tools/ipc_fuzzer/play_testcase.py delete mode 100644 chromium/tools/ipc_fuzzer/replay/DEPS delete mode 100644 chromium/tools/ipc_fuzzer/replay/replay.cc delete mode 100644 chromium/tools/ipc_fuzzer/replay/replay_process.cc delete mode 100644 chromium/tools/ipc_fuzzer/replay/replay_process.h delete mode 100755 chromium/tools/ipc_messages_log.py create mode 100644 chromium/tools/json_schema_compiler/BUILD.gn delete mode 100644 chromium/tools/json_to_struct/PRESUBMIT.py delete mode 100644 chromium/tools/json_to_struct/element_generator.py delete mode 100755 chromium/tools/json_to_struct/element_generator_test.py delete mode 100755 chromium/tools/json_to_struct/json_to_struct.py delete mode 100644 chromium/tools/json_to_struct/struct_generator.py delete mode 100755 chromium/tools/json_to_struct/struct_generator_test.py delete mode 100755 chromium/tools/licenses.py delete mode 100644 chromium/tools/linux/PRESUBMIT.py delete mode 100755 chromium/tools/linux/dump-static-initializers.py delete mode 100755 chromium/tools/linux/procfs.py delete mode 100644 chromium/tools/lsan/PRESUBMIT.py delete mode 100644 chromium/tools/lsan/suppressions.txt delete mode 100755 chromium/tools/mac/dump-static-initializers.py delete mode 100755 chromium/tools/mac/symbolicate_crash.py delete mode 100644 chromium/tools/measure_page_load_time/ff_ext/chrome.manifest delete mode 100644 chromium/tools/measure_page_load_time/ff_ext/content/firefoxOverlay.xul delete mode 100644 chromium/tools/measure_page_load_time/ff_ext/content/measure_page_load_time.js delete mode 100644 chromium/tools/measure_page_load_time/ff_ext/install.rdf delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.cpp delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.def delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.idl delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rc delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.rgs delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTime.vcproj delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.cpp delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.h delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/MeasurePageLoadTimeBHO.rgs delete mode 100644 chromium/tools/measure_page_load_time/ie_bho/resource.h delete mode 100644 chromium/tools/memory_watcher/DEPS delete mode 100644 chromium/tools/memory_watcher/README delete mode 100644 chromium/tools/memory_watcher/call_stack.cc delete mode 100644 chromium/tools/memory_watcher/call_stack.h delete mode 100644 chromium/tools/memory_watcher/dllmain.cc delete mode 100644 chromium/tools/memory_watcher/hotkey.h delete mode 100644 chromium/tools/memory_watcher/ia32_modrm_map.cc delete mode 100644 chromium/tools/memory_watcher/ia32_opcode_map.cc delete mode 100644 chromium/tools/memory_watcher/memory_hook.cc delete mode 100644 chromium/tools/memory_watcher/memory_hook.h delete mode 100644 chromium/tools/memory_watcher/memory_watcher.cc delete mode 100644 chromium/tools/memory_watcher/memory_watcher.gyp delete mode 100644 chromium/tools/memory_watcher/memory_watcher.h delete mode 100644 chromium/tools/memory_watcher/mini_disassembler.cc delete mode 100644 chromium/tools/memory_watcher/mini_disassembler.h delete mode 100644 chromium/tools/memory_watcher/mini_disassembler_types.h delete mode 100644 chromium/tools/memory_watcher/preamble_patcher.cc delete mode 100644 chromium/tools/memory_watcher/preamble_patcher.h delete mode 100644 chromium/tools/memory_watcher/preamble_patcher_with_stub.cc delete mode 100755 chromium/tools/memory_watcher/scripts/finditem.pl delete mode 100755 chromium/tools/memory_watcher/scripts/memprof.pl delete mode 100755 chromium/tools/memory_watcher/scripts/memtrace.pl delete mode 100755 chromium/tools/memory_watcher/scripts/summary.pl delete mode 100644 chromium/tools/metrics/OWNERS delete mode 100644 chromium/tools/metrics/actions/OWNERS delete mode 100644 chromium/tools/metrics/actions/chromeactions.txt delete mode 100755 chromium/tools/metrics/actions/extract_actions.py delete mode 100755 chromium/tools/metrics/actions/extract_actions.sh delete mode 100644 chromium/tools/metrics/histograms/PRESUBMIT.py delete mode 100644 chromium/tools/metrics/histograms/diffutil.py delete mode 100644 chromium/tools/metrics/histograms/extract_histograms.py delete mode 100644 chromium/tools/metrics/histograms/find_unmapped_histograms.py delete mode 100644 chromium/tools/metrics/histograms/histograms.xml delete mode 100755 chromium/tools/metrics/histograms/pretty_print.py delete mode 100644 chromium/tools/metrics/histograms/update_extension_functions.py delete mode 100644 chromium/tools/metrics/histograms/update_policies.py delete mode 100644 chromium/tools/metrics/histograms/validate_format.py delete mode 100755 chromium/tools/multi-process-rss.py delete mode 100755 chromium/tools/nocompile_driver.py delete mode 100755 chromium/tools/omahaproxy.py delete mode 100644 chromium/tools/oopif/OWNERS delete mode 100644 chromium/tools/oopif/iframe_server.py delete mode 100755 chromium/tools/prepare-bisect-perf-regression.py delete mode 100644 chromium/tools/python/google/__init__.py delete mode 100755 chromium/tools/python/google/gethash_timer.py delete mode 100644 chromium/tools/python/google/httpd_config/httpd.conf delete mode 100644 chromium/tools/python/google/httpd_config/httpd2.conf delete mode 100644 chromium/tools/python/google/httpd_config/httpd2.pem delete mode 100644 chromium/tools/python/google/httpd_config/httpd2_linux.conf delete mode 100644 chromium/tools/python/google/httpd_config/httpd2_mac.conf delete mode 100644 chromium/tools/python/google/httpd_config/mime.types delete mode 100644 chromium/tools/python/google/httpd_config/root_ca_cert.pem delete mode 100755 chromium/tools/python/google/httpd_utils.py delete mode 100644 chromium/tools/python/google/logging_utils.py delete mode 100644 chromium/tools/python/google/path_utils.py delete mode 100644 chromium/tools/python/google/platform_utils.py delete mode 100644 chromium/tools/python/google/platform_utils_linux.py delete mode 100644 chromium/tools/python/google/platform_utils_mac.py delete mode 100644 chromium/tools/python/google/platform_utils_win.py delete mode 100644 chromium/tools/python/google/process_utils.py create mode 100644 chromium/tools/relocation_packer/relocation_packer.gyp delete mode 100755 chromium/tools/resources/find_unused_resources.py delete mode 100755 chromium/tools/resources/optimize-png-files.sh delete mode 100755 chromium/tools/run-bisect-manual-test.py delete mode 100644 chromium/tools/run-bisect-perf-regression.cfg delete mode 100755 chromium/tools/run-bisect-perf-regression.py delete mode 100644 chromium/tools/run-perf-test.cfg delete mode 100755 chromium/tools/safely-roll-blink.py delete mode 100644 chromium/tools/set_default_handler/DEPS delete mode 100644 chromium/tools/set_default_handler/set_default_handler_main.cc delete mode 100755 chromium/tools/site_compare/command_line.py delete mode 100644 chromium/tools/site_compare/commands/__init__.py delete mode 100644 chromium/tools/site_compare/commands/compare2.py delete mode 100644 chromium/tools/site_compare/commands/maskmaker.py delete mode 100644 chromium/tools/site_compare/commands/measure.py delete mode 100644 chromium/tools/site_compare/commands/scrape.py delete mode 100644 chromium/tools/site_compare/commands/timeload.py delete mode 100644 chromium/tools/site_compare/drivers/__init__.py delete mode 100644 chromium/tools/site_compare/drivers/win32/__init__.py delete mode 100755 chromium/tools/site_compare/drivers/win32/keyboard.py delete mode 100755 chromium/tools/site_compare/drivers/win32/mouse.py delete mode 100755 chromium/tools/site_compare/drivers/win32/windowing.py delete mode 100644 chromium/tools/site_compare/operators/__init__.py delete mode 100644 chromium/tools/site_compare/operators/equals.py delete mode 100644 chromium/tools/site_compare/operators/equals_with_mask.py delete mode 100755 chromium/tools/site_compare/scrapers/__init__.py delete mode 100755 chromium/tools/site_compare/scrapers/chrome/__init__.py delete mode 100644 chromium/tools/site_compare/scrapers/chrome/chrome011010.py delete mode 100644 chromium/tools/site_compare/scrapers/chrome/chrome01970.py delete mode 100755 chromium/tools/site_compare/scrapers/chrome/chromebase.py delete mode 100755 chromium/tools/site_compare/scrapers/firefox/__init__.py delete mode 100755 chromium/tools/site_compare/scrapers/firefox/firefox2.py delete mode 100755 chromium/tools/site_compare/scrapers/ie/__init__.py delete mode 100755 chromium/tools/site_compare/scrapers/ie/ie7.py delete mode 100755 chromium/tools/site_compare/site_compare.py delete mode 100644 chromium/tools/site_compare/utils/__init__.py delete mode 100644 chromium/tools/site_compare/utils/browser_iterate.py delete mode 100755 chromium/tools/sort-headers.py delete mode 100644 chromium/tools/stats_viewer/OpenDialog.Designer.cs delete mode 100644 chromium/tools/stats_viewer/OpenDialog.cs delete mode 100644 chromium/tools/stats_viewer/OpenDialog.resx delete mode 100644 chromium/tools/stats_viewer/Properties/AssemblyInfo.cs delete mode 100644 chromium/tools/stats_viewer/Properties/Resources.Designer.cs delete mode 100644 chromium/tools/stats_viewer/Properties/Resources.resx delete mode 100644 chromium/tools/stats_viewer/Properties/Settings.Designer.cs delete mode 100644 chromium/tools/stats_viewer/Properties/Settings.settings delete mode 100644 chromium/tools/stats_viewer/Resources.Designer.cs delete mode 100644 chromium/tools/stats_viewer/Resources.resx delete mode 100644 chromium/tools/stats_viewer/Resources/kitten.png delete mode 100644 chromium/tools/stats_viewer/Resources/kittenbackground.png delete mode 100644 chromium/tools/stats_viewer/program.cs delete mode 100644 chromium/tools/stats_viewer/stats_table.cs delete mode 100644 chromium/tools/stats_viewer/stats_viewer.Designer.cs delete mode 100644 chromium/tools/stats_viewer/stats_viewer.cs delete mode 100644 chromium/tools/stats_viewer/stats_viewer.csproj delete mode 100644 chromium/tools/stats_viewer/stats_viewer.resx delete mode 100644 chromium/tools/stats_viewer/win32.cs create mode 100644 chromium/tools/swarming_client/example/payload/hello_world.isolate create mode 100644 chromium/tools/swarming_client/googletest/tests/isolate_test_cases/gtest_fake_pass.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/all_items_invalid.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/fail.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/missing_trailing_slash.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/no_run.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/non_existent.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/simple.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/split.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/symlink_full.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/symlink_outside_build_root.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/symlink_partial.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/touch_only.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/touch_root.isolate create mode 100644 chromium/tools/swarming_client/tests/isolate/with_flag.isolate delete mode 100755 chromium/tools/swig/swig.py delete mode 100644 chromium/tools/symsrc/COPYING-pefile delete mode 100644 chromium/tools/symsrc/README.chromium delete mode 100755 chromium/tools/symsrc/img_fingerprint.py delete mode 100755 chromium/tools/symsrc/pdb_fingerprint_from_img.py delete mode 100644 chromium/tools/symsrc/pefile.py delete mode 100755 chromium/tools/symsrc/source_index.py delete mode 100755 chromium/tools/sync-webkit-git.py delete mode 100755 chromium/tools/tcmalloc/print-live-objects.py create mode 100644 chromium/tools/telemetry/telemetry.gyp delete mode 100644 chromium/tools/trace/trace.html delete mode 100644 chromium/tools/trace/trace_data.js delete mode 100644 chromium/tools/traceline/svgui/README delete mode 100644 chromium/tools/traceline/svgui/startup-release.json delete mode 100644 chromium/tools/traceline/svgui/traceline.css delete mode 100644 chromium/tools/traceline/svgui/traceline.js delete mode 100644 chromium/tools/traceline/svgui/traceline.xml delete mode 100644 chromium/tools/traceline/traceline/Makefile delete mode 100644 chromium/tools/traceline/traceline/README delete mode 100644 chromium/tools/traceline/traceline/assembler.h delete mode 100644 chromium/tools/traceline/traceline/assembler_unittest.cc delete mode 100755 chromium/tools/traceline/traceline/assembler_unittest.sh delete mode 100644 chromium/tools/traceline/traceline/assembler_unittest.sh.expected delete mode 100755 chromium/tools/traceline/traceline/dump_syscalls_idarub.rb delete mode 100644 chromium/tools/traceline/traceline/logging.h delete mode 100644 chromium/tools/traceline/traceline/main.cc delete mode 100644 chromium/tools/traceline/traceline/rdtsc.h delete mode 100644 chromium/tools/traceline/traceline/scripts/__init__.py delete mode 100755 chromium/tools/traceline/traceline/scripts/alloc.py delete mode 100644 chromium/tools/traceline/traceline/scripts/crit_sec.js delete mode 100755 chromium/tools/traceline/traceline/scripts/crit_sec.py delete mode 100755 chromium/tools/traceline/traceline/scripts/filter_short.py delete mode 100755 chromium/tools/traceline/traceline/scripts/filter_split.sh delete mode 100644 chromium/tools/traceline/traceline/scripts/heap.js delete mode 100755 chromium/tools/traceline/traceline/scripts/scstats.py delete mode 100755 chromium/tools/traceline/traceline/scripts/split.py delete mode 100644 chromium/tools/traceline/traceline/scripts/syscalls.py delete mode 100644 chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc delete mode 100644 chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc delete mode 100644 chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc delete mode 100644 chromium/tools/traceline/traceline/sidestep/mini_disassembler.h delete mode 100644 chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h delete mode 100644 chromium/tools/traceline/traceline/stubs.asm delete mode 100644 chromium/tools/traceline/traceline/sym_resolver.h delete mode 100644 chromium/tools/traceline/traceline/syscall_map.h delete mode 100755 chromium/tools/unused-symbols-report.py delete mode 100755 chromium/tools/update_reference_build.py delete mode 100644 chromium/tools/usb_ids/usb_ids.py delete mode 100644 chromium/tools/valgrind/OWNERS delete mode 100755 chromium/tools/valgrind/asan/asan_symbolize.py delete mode 100755 chromium/tools/valgrind/asan/asan_wrapper.sh delete mode 100644 chromium/tools/valgrind/asan/third_party/README.chromium delete mode 100644 chromium/tools/valgrind/asan/third_party/__init__.py delete mode 100755 chromium/tools/valgrind/asan/third_party/asan_symbolize.py delete mode 100644 chromium/tools/valgrind/browser_wrapper_win.py delete mode 100755 chromium/tools/valgrind/chrome_tests.bat delete mode 100755 chromium/tools/valgrind/chrome_tests.py delete mode 100755 chromium/tools/valgrind/chrome_tests.sh delete mode 100644 chromium/tools/valgrind/common.py delete mode 100755 chromium/tools/valgrind/drmemory.bat delete mode 100644 chromium/tools/valgrind/drmemory/OWNERS delete mode 100644 chromium/tools/valgrind/drmemory/PRESUBMIT.py delete mode 100644 chromium/tools/valgrind/drmemory/suppressions.txt delete mode 100644 chromium/tools/valgrind/drmemory/suppressions_full.txt delete mode 100755 chromium/tools/valgrind/drmemory_analyze.py delete mode 100644 chromium/tools/valgrind/gdb_helper.py delete mode 100644 chromium/tools/valgrind/gtest_exclude/OWNERS delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/suppressions.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt delete mode 100644 chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt delete mode 100755 chromium/tools/valgrind/locate_valgrind.sh delete mode 100644 chromium/tools/valgrind/memcheck/OWNERS delete mode 100644 chromium/tools/valgrind/memcheck/PRESUBMIT.py delete mode 100644 chromium/tools/valgrind/memcheck/suppressions.txt delete mode 100644 chromium/tools/valgrind/memcheck/suppressions_linux.txt delete mode 100644 chromium/tools/valgrind/memcheck/suppressions_mac.txt delete mode 100755 chromium/tools/valgrind/memcheck_analyze.py delete mode 100755 chromium/tools/valgrind/regrind.sh delete mode 100644 chromium/tools/valgrind/reliability/url_list.txt delete mode 100755 chromium/tools/valgrind/scan-build.py delete mode 100755 chromium/tools/valgrind/suppressions.py delete mode 100755 chromium/tools/valgrind/test_suppressions.py delete mode 100644 chromium/tools/valgrind/tsan/OWNERS delete mode 100644 chromium/tools/valgrind/tsan/PRESUBMIT.py delete mode 100644 chromium/tools/valgrind/tsan/ignores.txt delete mode 100644 chromium/tools/valgrind/tsan/ignores_win32.txt delete mode 100644 chromium/tools/valgrind/tsan/suppressions.txt delete mode 100644 chromium/tools/valgrind/tsan/suppressions_win32.txt delete mode 100755 chromium/tools/valgrind/tsan_analyze.py delete mode 100644 chromium/tools/valgrind/tsan_v2/ignores.txt delete mode 100644 chromium/tools/valgrind/tsan_v2/suppressions.txt delete mode 100755 chromium/tools/valgrind/unused_suppressions.py delete mode 100755 chromium/tools/valgrind/valgrind.sh delete mode 100644 chromium/tools/valgrind/valgrind_test.py delete mode 100755 chromium/tools/valgrind/waterfall.sh delete mode 100644 chromium/tools/vim/chromium.ycm_extra_conf.py delete mode 100644 chromium/tools/vim/filetypes.vim delete mode 100644 chromium/tools/vim/ninja-build.vim create mode 100644 chromium/tools/win/static_initializers/static_initializers.gyp delete mode 100755 chromium/tools/win/toolchain/7z/7z.dll delete mode 100755 chromium/tools/win/toolchain/7z/7z.exe delete mode 100644 chromium/tools/win/toolchain/7z/LICENSE delete mode 100644 chromium/tools/win/toolchain/get_toolchain_if_necessary.py delete mode 100644 chromium/tools/win/toolchain/toolchain.py delete mode 100644 chromium/tools/win/toolchain/toolchain2013.py delete mode 100644 chromium/tools/xdisplaycheck/xdisplaycheck.cc (limited to 'chromium/tools') diff --git a/chromium/tools/DEPS b/chromium/tools/DEPS deleted file mode 100644 index dc04e3dfc6b..00000000000 --- a/chromium/tools/DEPS +++ /dev/null @@ -1,6 +0,0 @@ -# checkdeps.py shouldn't check include paths for files in these dirs: -skip_child_includes = [ - "clang", - "gyp", - "traceline", -] diff --git a/chromium/tools/OWNERS b/chromium/tools/OWNERS deleted file mode 100644 index 4cd808f0409..00000000000 --- a/chromium/tools/OWNERS +++ /dev/null @@ -1,3 +0,0 @@ -* - -per-file bisect-builds.py=rsesek@chromium.org diff --git a/chromium/tools/PRESUBMIT.py b/chromium/tools/PRESUBMIT.py deleted file mode 100644 index aff6048f1a8..00000000000 --- a/chromium/tools/PRESUBMIT.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Top-level presubmit script for bisect/perf trybot. - -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for -details on the presubmit API built into gcl. -""" - -import imp -import os - -def _ExamineConfigFiles(input_api): - for f in input_api.AffectedFiles(): - if (not f.LocalPath().endswith('run-bisect-perf-regression.cfg') and - not f.LocalPath().endswith('run-perf-test.cfg')): - continue - - try: - cfg_file = imp.load_source('config', os.path.basename(f.LocalPath())) - - for k, v in cfg_file.config.iteritems(): - if v: - return f.LocalPath() - except (IOError, AttributeError, TypeError): - return f.LocalPath() - - return None - -def _CheckNoChangesToBisectConfigFile(input_api, output_api): - results = _ExamineConfigFiles(input_api) - if results: - return [output_api.PresubmitError( - 'The bisection config file should only contain a config dict with ' - 'empty fields. Changes to this file should never be submitted.', - items=[results])] - - return [] - -def CommonChecks(input_api, output_api): - results = [] - results.extend(_CheckNoChangesToBisectConfigFile(input_api, output_api)) - return results - -def CheckChangeOnUpload(input_api, output_api): - return CommonChecks(input_api, output_api) - -def CheckChangeOnCommit(input_api, output_api): - return CommonChecks(input_api, output_api) diff --git a/chromium/tools/android/android_tools.gyp b/chromium/tools/android/android_tools.gyp index ed5e905c814..3fe1c6d8c62 100644 --- a/chromium/tools/android/android_tools.gyp +++ b/chromium/tools/android/android_tools.gyp @@ -11,9 +11,12 @@ 'type': 'none', 'dependencies': [ 'adb_reboot/adb_reboot.gyp:adb_reboot', + 'file_poller/file_poller.gyp:file_poller', 'forwarder2/forwarder.gyp:forwarder2', 'md5sum/md5sum.gyp:md5sum', 'purge_ashmem/purge_ashmem.gyp:purge_ashmem', + 'run_pie/run_pie.gyp:run_pie', + '../../tools/telemetry/telemetry.gyp:*#host', ], }, { @@ -30,5 +33,12 @@ 'memconsumer/memconsumer.gyp:memconsumer', ], }, + { + 'target_name': 'ps_ext', + 'type': 'none', + 'dependencies': [ + 'ps_ext/ps_ext.gyp:ps_ext', + ], + }, ], } diff --git a/chromium/tools/android/file_poller/file_poller.gyp b/chromium/tools/android/file_poller/file_poller.gyp new file mode 100644 index 00000000000..097344d2d29 --- /dev/null +++ b/chromium/tools/android/file_poller/file_poller.gyp @@ -0,0 +1,18 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'file_poller', + 'type': 'executable', + 'dependencies': [ + '../../../base/base.gyp:base', + ], + 'sources': [ + 'file_poller.cc', + ], + }, + ], +} diff --git a/chromium/tools/android/forwarder2/forwarder.gyp b/chromium/tools/android/forwarder2/forwarder.gyp index 3f84e43bd66..fbf5eba6f2f 100644 --- a/chromium/tools/android/forwarder2/forwarder.gyp +++ b/chromium/tools/android/forwarder2/forwarder.gyp @@ -30,19 +30,6 @@ 'include_dirs': [ '../../..', ], - 'conditions': [ - # Warning: A PIE tool cannot run on ICS 4.0.4, so only - # build it as position-independent when ASAN - # is activated. See b/6587214 for details. - [ 'asan==1', { - 'cflags': [ - '-fPIE', - ], - 'ldflags': [ - '-pie', - ], - }], - ], 'sources': [ 'command.cc', 'common.cc', @@ -51,6 +38,7 @@ 'device_forwarder_main.cc', 'device_listener.cc', 'forwarder.cc', + 'forwarders_manager.cc', 'pipe_notifier.cc', 'socket.cc', ], @@ -61,7 +49,6 @@ 'toolsets': ['host'], 'dependencies': [ '../../../base/base.gyp:base', - '../../../build/linux/system.gyp:x11', '../common/common.gyp:android_tools_common', ], 'include_dirs': [ @@ -72,14 +59,11 @@ 'common.cc', 'daemon.cc', 'forwarder.cc', + 'forwarders_manager.cc', 'host_controller.cc', 'host_forwarder_main.cc', 'pipe_notifier.cc', 'socket.cc', - # TODO(pliard): Remove this and x11 dependency above. This is needed - # to avoid undefined references at link time. - '../../../base/message_loop/message_pump_glib.cc', - '../../../base/message_loop/message_pump_gtk.cc', ], }, ], diff --git a/chromium/tools/android/memdump/memdump.gyp b/chromium/tools/android/memdump/memdump.gyp index faa24d0737b..f47cedf0048 100644 --- a/chromium/tools/android/memdump/memdump.gyp +++ b/chromium/tools/android/memdump/memdump.gyp @@ -5,27 +5,35 @@ { 'targets': [ { - 'target_name': 'memdump', + 'target_name': 'memdump-unstripped', 'type': 'executable', 'dependencies': [ '../../../base/base.gyp:base', ], - 'conditions': [ - # Warning: A PIE tool cannot run on ICS 4.0.4, so only - # build it as position-independent when ASAN - # is activated. See b/6587214 for details. - [ 'asan==1', { - 'cflags': [ - '-fPIE', - ], - 'ldflags': [ - '-pie', - ], - }], - ], 'sources': [ 'memdump.cc', ], }, + { + 'target_name': 'memdump', + 'type': 'none', + 'dependencies': [ + 'memdump-unstripped', + ], + 'actions': [ + { + 'action_name': 'strip_memdump', + 'inputs': ['<(PRODUCT_DIR)/memdump-unstripped'], + 'outputs': ['<(PRODUCT_DIR)/memdump'], + 'action': [ + '<(android_strip)', + '--strip-unneeded', + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + }, + ], + }, ], } diff --git a/chromium/tools/android/ps_ext/ps_ext.gyp b/chromium/tools/android/ps_ext/ps_ext.gyp new file mode 100644 index 00000000000..f467d93cf04 --- /dev/null +++ b/chromium/tools/android/ps_ext/ps_ext.gyp @@ -0,0 +1,36 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'ps_ext-unstripped', + 'type': 'executable', + 'sources': [ + 'ps_ext.c', + ], + }, + { + 'target_name': 'ps_ext', + 'type': 'none', + 'dependencies': [ + 'ps_ext-unstripped', + ], + 'actions': [ + { + 'action_name': 'strip_ps_ext', + 'inputs': ['<(PRODUCT_DIR)/ps_ext-unstripped'], + 'outputs': ['<(PRODUCT_DIR)/ps_ext'], + 'action': [ + '<(android_strip)', + '--strip-unneeded', + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + }, + ], + }, + ], +} diff --git a/chromium/tools/android/purge_ashmem/purge_ashmem.gyp b/chromium/tools/android/purge_ashmem/purge_ashmem.gyp index 842d7561bb3..d563b1fa982 100644 --- a/chromium/tools/android/purge_ashmem/purge_ashmem.gyp +++ b/chromium/tools/android/purge_ashmem/purge_ashmem.gyp @@ -13,19 +13,6 @@ 'include_dirs': [ '../../../', ], - 'conditions': [ - # Warning: A PIE tool cannot run on ICS 4.0.4, so only - # build it as position-independent when ASAN - # is activated. See b/6587214 for details. - [ 'asan==1', { - 'cflags': [ - '-fPIE', - ], - 'ldflags': [ - '-pie', - ], - }], - ], 'sources': [ 'purge_ashmem.c', ], diff --git a/chromium/tools/android/run_pie/run_pie.gyp b/chromium/tools/android/run_pie/run_pie.gyp new file mode 100644 index 00000000000..b713dc4f855 --- /dev/null +++ b/chromium/tools/android/run_pie/run_pie.gyp @@ -0,0 +1,49 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'run_pie-unstripped', + 'type': 'executable', + 'sources': [ + 'run_pie.c', + ], + # See crbug.com/373219. This is the only Android executable which must be + # non PIE. + 'cflags!': [ + '-fPIE', + ], + 'ldflags!': [ + '-pie', + ], + # Don't inherit unneeded dependencies on stlport.so, so the binary remains + # self-contained also in component=shared_library builds. + 'libraries!': [ + '-l<(android_stlport_library)', + ], + }, + { + 'target_name': 'run_pie', + 'type': 'none', + 'dependencies': [ + 'run_pie-unstripped', + ], + 'actions': [ + { + 'action_name': 'strip_run_pie', + 'inputs': ['<(PRODUCT_DIR)/run_pie-unstripped'], + 'outputs': ['<(PRODUCT_DIR)/run_pie'], + 'action': [ + '<(android_strip)', + '--strip-unneeded', + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + }, + ], + }, + ], +} diff --git a/chromium/tools/bash-completion b/chromium/tools/bash-completion deleted file mode 100644 index 19172dab145..00000000000 --- a/chromium/tools/bash-completion +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Flag completion rule for bash. -# To load in your shell, "source path/to/this/file". - -chrome_source=$(cd $(dirname $BASH_SOURCE)/.. && pwd) - -_chrome_flag() { - local cur targets - cur="${COMP_WORDS[COMP_CWORD]}" - targets=$(cd $chrome_source; \ - git ls-files '*switches*' | \ - xargs sed -ne 's/^[^/]*"\([^" /]\{1,\}\)".*/--\1/p') - COMPREPLY=($(compgen -W "$targets" -- "$cur")) - return 0 -} - -complete -F _chrome_flag google-chrome -complete -F _chrome_flag chrome -if [ $(uname) = "Darwin" ] -then - complete -F _chrome_flag Chromium -fi diff --git a/chromium/tools/bisect-builds.py b/chromium/tools/bisect-builds.py deleted file mode 100755 index 00128fbd161..00000000000 --- a/chromium/tools/bisect-builds.py +++ /dev/null @@ -1,859 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Snapshot Build Bisect Tool - -This script bisects a snapshot archive using binary search. It starts at -a bad revision (it will try to guess HEAD) and asks for a last known-good -revision. It will then binary search across this revision range by downloading, -unzipping, and opening Chromium for you. After testing the specific revision, -it will ask you whether it is good or bad before continuing the search. -""" - -# The root URL for storage. -CHROMIUM_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-browser-snapshots' -WEBKIT_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-webkit-snapshots' - -# The root URL for official builds. -OFFICIAL_BASE_URL = 'http://master.chrome.corp.google.com/official_builds' - -# Changelogs URL. -CHANGELOG_URL = 'http://build.chromium.org/f/chromium/' \ - 'perf/dashboard/ui/changelog.html?' \ - 'url=/trunk/src&range=%d%%3A%d' - -# Official Changelogs URL. -OFFICIAL_CHANGELOG_URL = 'http://omahaproxy.appspot.com/'\ - 'changelog?old_version=%s&new_version=%s' - -# DEPS file URL. -DEPS_FILE = 'http://src.chromium.org/viewvc/chrome/trunk/src/DEPS?revision=%d' -# Blink Changelogs URL. -BLINK_CHANGELOG_URL = 'http://build.chromium.org/f/chromium/' \ - 'perf/dashboard/ui/changelog_blink.html?' \ - 'url=/trunk&range=%d%%3A%d' - -DONE_MESSAGE_GOOD_MIN = 'You are probably looking for a change made after %s ' \ - '(known good), but no later than %s (first known bad).' -DONE_MESSAGE_GOOD_MAX = 'You are probably looking for a change made after %s ' \ - '(known bad), but no later than %s (first known good).' - -############################################################################### - -import json -import optparse -import os -import re -import shlex -import shutil -import subprocess -import sys -import tempfile -import threading -import urllib -from distutils.version import LooseVersion -from xml.etree import ElementTree -import zipfile - - -class PathContext(object): - """A PathContext is used to carry the information used to construct URLs and - paths when dealing with the storage server and archives.""" - def __init__(self, base_url, platform, good_revision, bad_revision, - is_official, is_aura, flash_path = None): - super(PathContext, self).__init__() - # Store off the input parameters. - self.base_url = base_url - self.platform = platform # What's passed in to the '-a/--archive' option. - self.good_revision = good_revision - self.bad_revision = bad_revision - self.is_official = is_official - self.is_aura = is_aura - self.flash_path = flash_path - - # The name of the ZIP file in a revision directory on the server. - self.archive_name = None - - # Set some internal members: - # _listing_platform_dir = Directory that holds revisions. Ends with a '/'. - # _archive_extract_dir = Uncompressed directory in the archive_name file. - # _binary_name = The name of the executable to run. - if self.platform in ('linux', 'linux64', 'linux-arm'): - self._binary_name = 'chrome' - elif self.platform == 'mac': - self.archive_name = 'chrome-mac.zip' - self._archive_extract_dir = 'chrome-mac' - elif self.platform == 'win': - self.archive_name = 'chrome-win32.zip' - self._archive_extract_dir = 'chrome-win32' - self._binary_name = 'chrome.exe' - else: - raise Exception('Invalid platform: %s' % self.platform) - - if is_official: - if self.platform == 'linux': - self._listing_platform_dir = 'precise32bit/' - self.archive_name = 'chrome-precise32bit.zip' - self._archive_extract_dir = 'chrome-precise32bit' - elif self.platform == 'linux64': - self._listing_platform_dir = 'precise64bit/' - self.archive_name = 'chrome-precise64bit.zip' - self._archive_extract_dir = 'chrome-precise64bit' - elif self.platform == 'mac': - self._listing_platform_dir = 'mac/' - self._binary_name = 'Google Chrome.app/Contents/MacOS/Google Chrome' - elif self.platform == 'win': - if self.is_aura: - self._listing_platform_dir = 'win-aura/' - else: - self._listing_platform_dir = 'win/' - else: - if self.platform in ('linux', 'linux64', 'linux-arm'): - self.archive_name = 'chrome-linux.zip' - self._archive_extract_dir = 'chrome-linux' - if self.platform == 'linux': - self._listing_platform_dir = 'Linux/' - elif self.platform == 'linux64': - self._listing_platform_dir = 'Linux_x64/' - elif self.platform == 'linux-arm': - self._listing_platform_dir = 'Linux_ARM_Cross-Compile/' - elif self.platform == 'mac': - self._listing_platform_dir = 'Mac/' - self._binary_name = 'Chromium.app/Contents/MacOS/Chromium' - elif self.platform == 'win': - self._listing_platform_dir = 'Win/' - - def GetListingURL(self, marker=None): - """Returns the URL for a directory listing, with an optional marker.""" - marker_param = '' - if marker: - marker_param = '&marker=' + str(marker) - return self.base_url + '/?delimiter=/&prefix=' + \ - self._listing_platform_dir + marker_param - - def GetDownloadURL(self, revision): - """Gets the download URL for a build archive of a specific revision.""" - if self.is_official: - return "%s/%s/%s%s" % ( - OFFICIAL_BASE_URL, revision, self._listing_platform_dir, - self.archive_name) - else: - return "%s/%s%s/%s" % (self.base_url, self._listing_platform_dir, - revision, self.archive_name) - - def GetLastChangeURL(self): - """Returns a URL to the LAST_CHANGE file.""" - return self.base_url + '/' + self._listing_platform_dir + 'LAST_CHANGE' - - def GetLaunchPath(self): - """Returns a relative path (presumably from the archive extraction location) - that is used to run the executable.""" - return os.path.join(self._archive_extract_dir, self._binary_name) - - def IsAuraBuild(self, build): - """Check the given build is Aura.""" - return build.split('.')[3] == '1' - - def IsASANBuild(self, build): - """Check the given build is ASAN build.""" - return build.split('.')[3] == '2' - - def ParseDirectoryIndex(self): - """Parses the Google Storage directory listing into a list of revision - numbers.""" - - def _FetchAndParse(url): - """Fetches a URL and returns a 2-Tuple of ([revisions], next-marker). If - next-marker is not None, then the listing is a partial listing and another - fetch should be performed with next-marker being the marker= GET - parameter.""" - handle = urllib.urlopen(url) - document = ElementTree.parse(handle) - - # All nodes in the tree are namespaced. Get the root's tag name to extract - # the namespace. Etree does namespaces as |{namespace}tag|. - root_tag = document.getroot().tag - end_ns_pos = root_tag.find('}') - if end_ns_pos == -1: - raise Exception("Could not locate end namespace for directory index") - namespace = root_tag[:end_ns_pos + 1] - - # Find the prefix (_listing_platform_dir) and whether or not the list is - # truncated. - prefix_len = len(document.find(namespace + 'Prefix').text) - next_marker = None - is_truncated = document.find(namespace + 'IsTruncated') - if is_truncated is not None and is_truncated.text.lower() == 'true': - next_marker = document.find(namespace + 'NextMarker').text - - # Get a list of all the revisions. - all_prefixes = document.findall(namespace + 'CommonPrefixes/' + - namespace + 'Prefix') - # The nodes have content of the form of - # |_listing_platform_dir/revision/|. Strip off the platform dir and the - # trailing slash to just have a number. - revisions = [] - for prefix in all_prefixes: - revnum = prefix.text[prefix_len:-1] - try: - revnum = int(revnum) - revisions.append(revnum) - except ValueError: - pass - return (revisions, next_marker) - - # Fetch the first list of revisions. - (revisions, next_marker) = _FetchAndParse(self.GetListingURL()) - - # If the result list was truncated, refetch with the next marker. Do this - # until an entire directory listing is done. - while next_marker: - next_url = self.GetListingURL(next_marker) - (new_revisions, next_marker) = _FetchAndParse(next_url) - revisions.extend(new_revisions) - return revisions - - def GetRevList(self): - """Gets the list of revision numbers between self.good_revision and - self.bad_revision.""" - # Download the revlist and filter for just the range between good and bad. - minrev = min(self.good_revision, self.bad_revision) - maxrev = max(self.good_revision, self.bad_revision) - revlist_all = map(int, self.ParseDirectoryIndex()) - - revlist = [x for x in revlist_all if x >= int(minrev) and x <= int(maxrev)] - revlist.sort() - - # Set good and bad revisions to be legit revisions. - if revlist: - if self.good_revision < self.bad_revision: - self.good_revision = revlist[0] - self.bad_revision = revlist[-1] - else: - self.bad_revision = revlist[0] - self.good_revision = revlist[-1] - - # Fix chromium rev so that the deps blink revision matches REVISIONS file. - if self.base_url == WEBKIT_BASE_URL: - revlist_all.sort() - self.good_revision = FixChromiumRevForBlink(revlist, - revlist_all, - self, - self.good_revision) - self.bad_revision = FixChromiumRevForBlink(revlist, - revlist_all, - self, - self.bad_revision) - return revlist - - def GetOfficialBuildsList(self): - """Gets the list of official build numbers between self.good_revision and - self.bad_revision.""" - # Download the revlist and filter for just the range between good and bad. - minrev = min(self.good_revision, self.bad_revision) - maxrev = max(self.good_revision, self.bad_revision) - handle = urllib.urlopen(OFFICIAL_BASE_URL) - dirindex = handle.read() - handle.close() - build_numbers = re.findall(r'', dirindex) - final_list = [] - i = 0 - parsed_build_numbers = [LooseVersion(x) for x in build_numbers] - for build_number in sorted(parsed_build_numbers): - path = OFFICIAL_BASE_URL + '/' + str(build_number) + '/' + \ - self._listing_platform_dir + self.archive_name - i = i + 1 - try: - connection = urllib.urlopen(path) - connection.close() - if build_number > maxrev: - break - if build_number >= minrev: - # If we are bisecting Aura, we want to include only builds which - # ends with ".1". - if self.is_aura: - if self.IsAuraBuild(str(build_number)): - final_list.append(str(build_number)) - # If we are bisecting only official builds (without --aura), - # we can not include builds which ends with '.1' or '.2' since - # they have different folder hierarchy inside. - elif (not self.IsAuraBuild(str(build_number)) and - not self.IsASANBuild(str(build_number))): - final_list.append(str(build_number)) - except urllib.HTTPError, e: - pass - return final_list - -def UnzipFilenameToDir(filename, directory): - """Unzip |filename| to |directory|.""" - cwd = os.getcwd() - if not os.path.isabs(filename): - filename = os.path.join(cwd, filename) - zf = zipfile.ZipFile(filename) - # Make base. - if not os.path.isdir(directory): - os.mkdir(directory) - os.chdir(directory) - # Extract files. - for info in zf.infolist(): - name = info.filename - if name.endswith('/'): # dir - if not os.path.isdir(name): - os.makedirs(name) - else: # file - directory = os.path.dirname(name) - if not os.path.isdir(directory): - os.makedirs(directory) - out = open(name, 'wb') - out.write(zf.read(name)) - out.close() - # Set permissions. Permission info in external_attr is shifted 16 bits. - os.chmod(name, info.external_attr >> 16L) - os.chdir(cwd) - - -def FetchRevision(context, rev, filename, quit_event=None, progress_event=None): - """Downloads and unzips revision |rev|. - @param context A PathContext instance. - @param rev The Chromium revision number/tag to download. - @param filename The destination for the downloaded file. - @param quit_event A threading.Event which will be set by the master thread to - indicate that the download should be aborted. - @param progress_event A threading.Event which will be set by the master thread - to indicate that the progress of the download should be - displayed. - """ - def ReportHook(blocknum, blocksize, totalsize): - if quit_event and quit_event.isSet(): - raise RuntimeError("Aborting download of revision %s" % str(rev)) - if progress_event and progress_event.isSet(): - size = blocknum * blocksize - if totalsize == -1: # Total size not known. - progress = "Received %d bytes" % size - else: - size = min(totalsize, size) - progress = "Received %d of %d bytes, %.2f%%" % ( - size, totalsize, 100.0 * size / totalsize) - # Send a \r to let all progress messages use just one line of output. - sys.stdout.write("\r" + progress) - sys.stdout.flush() - - download_url = context.GetDownloadURL(rev) - try: - urllib.urlretrieve(download_url, filename, ReportHook) - if progress_event and progress_event.isSet(): - print - except RuntimeError, e: - pass - - -def RunRevision(context, revision, zipfile, profile, num_runs, command, args): - """Given a zipped revision, unzip it and run the test.""" - print "Trying revision %s..." % str(revision) - - # Create a temp directory and unzip the revision into it. - cwd = os.getcwd() - tempdir = tempfile.mkdtemp(prefix='bisect_tmp') - UnzipFilenameToDir(zipfile, tempdir) - os.chdir(tempdir) - - # Run the build as many times as specified. - testargs = ['--user-data-dir=%s' % profile] + args - # The sandbox must be run as root on Official Chrome, so bypass it. - if ((context.is_official or context.flash_path) and - context.platform.startswith('linux')): - testargs.append('--no-sandbox') - if context.flash_path: - testargs.append('--ppapi-flash-path=%s' % context.flash_path) - # We have to pass a large enough Flash version, which currently needs not - # be correct. Instead of requiring the user of the script to figure out and - # pass the correct version we just spoof it. - testargs.append('--ppapi-flash-version=99.9.999.999') - - runcommand = [] - for token in shlex.split(command): - if token == "%a": - runcommand.extend(testargs) - else: - runcommand.append( \ - token.replace('%p', context.GetLaunchPath()) \ - .replace('%s', ' '.join(testargs))) - - for i in range(0, num_runs): - subproc = subprocess.Popen(runcommand, - bufsize=-1, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - (stdout, stderr) = subproc.communicate() - - os.chdir(cwd) - try: - shutil.rmtree(tempdir, True) - except Exception, e: - pass - - return (subproc.returncode, stdout, stderr) - - -def AskIsGoodBuild(rev, official_builds, status, stdout, stderr): - """Ask the user whether build |rev| is good or bad.""" - # Loop until we get a response that we can parse. - while True: - response = raw_input('Revision %s is ' \ - '[(g)ood/(b)ad/(r)etry/(u)nknown/(q)uit]: ' % - str(rev)) - if response and response in ('g', 'b', 'r', 'u'): - return response - if response and response == 'q': - raise SystemExit() - - -class DownloadJob(object): - """DownloadJob represents a task to download a given Chromium revision.""" - def __init__(self, context, name, rev, zipfile): - super(DownloadJob, self).__init__() - # Store off the input parameters. - self.context = context - self.name = name - self.rev = rev - self.zipfile = zipfile - self.quit_event = threading.Event() - self.progress_event = threading.Event() - - def Start(self): - """Starts the download.""" - fetchargs = (self.context, - self.rev, - self.zipfile, - self.quit_event, - self.progress_event) - self.thread = threading.Thread(target=FetchRevision, - name=self.name, - args=fetchargs) - self.thread.start() - - def Stop(self): - """Stops the download which must have been started previously.""" - self.quit_event.set() - self.thread.join() - os.unlink(self.zipfile) - - def WaitFor(self): - """Prints a message and waits for the download to complete. The download - must have been started previously.""" - print "Downloading revision %s..." % str(self.rev) - self.progress_event.set() # Display progress of download. - self.thread.join() - - -def Bisect(base_url, - platform, - official_builds, - is_aura, - good_rev=0, - bad_rev=0, - num_runs=1, - command="%p %a", - try_args=(), - profile=None, - flash_path=None, - evaluate=AskIsGoodBuild): - """Given known good and known bad revisions, run a binary search on all - archived revisions to determine the last known good revision. - - @param platform Which build to download/run ('mac', 'win', 'linux64', etc.). - @param official_builds Specify build type (Chromium or Official build). - @param good_rev Number/tag of the known good revision. - @param bad_rev Number/tag of the known bad revision. - @param num_runs Number of times to run each build for asking good/bad. - @param try_args A tuple of arguments to pass to the test application. - @param profile The name of the user profile to run with. - @param evaluate A function which returns 'g' if the argument build is good, - 'b' if it's bad or 'u' if unknown. - - Threading is used to fetch Chromium revisions in the background, speeding up - the user's experience. For example, suppose the bounds of the search are - good_rev=0, bad_rev=100. The first revision to be checked is 50. Depending on - whether revision 50 is good or bad, the next revision to check will be either - 25 or 75. So, while revision 50 is being checked, the script will download - revisions 25 and 75 in the background. Once the good/bad verdict on rev 50 is - known: - - - If rev 50 is good, the download of rev 25 is cancelled, and the next test - is run on rev 75. - - - If rev 50 is bad, the download of rev 75 is cancelled, and the next test - is run on rev 25. - """ - - if not profile: - profile = 'profile' - - context = PathContext(base_url, platform, good_rev, bad_rev, - official_builds, is_aura, flash_path) - cwd = os.getcwd() - - print "Downloading list of known revisions..." - _GetDownloadPath = lambda rev: os.path.join(cwd, - '%s-%s' % (str(rev), context.archive_name)) - if official_builds: - revlist = context.GetOfficialBuildsList() - else: - revlist = context.GetRevList() - - # Get a list of revisions to bisect across. - if len(revlist) < 2: # Don't have enough builds to bisect. - msg = 'We don\'t have enough builds to bisect. revlist: %s' % revlist - raise RuntimeError(msg) - - # Figure out our bookends and first pivot point; fetch the pivot revision. - minrev = 0 - maxrev = len(revlist) - 1 - pivot = maxrev / 2 - rev = revlist[pivot] - zipfile = _GetDownloadPath(rev) - fetch = DownloadJob(context, 'initial_fetch', rev, zipfile) - fetch.Start() - fetch.WaitFor() - - # Binary search time! - while fetch and fetch.zipfile and maxrev - minrev > 1: - if bad_rev < good_rev: - min_str, max_str = "bad", "good" - else: - min_str, max_str = "good", "bad" - print 'Bisecting range [%s (%s), %s (%s)].' % (revlist[minrev], min_str, \ - revlist[maxrev], max_str) - - # Pre-fetch next two possible pivots - # - down_pivot is the next revision to check if the current revision turns - # out to be bad. - # - up_pivot is the next revision to check if the current revision turns - # out to be good. - down_pivot = int((pivot - minrev) / 2) + minrev - down_fetch = None - if down_pivot != pivot and down_pivot != minrev: - down_rev = revlist[down_pivot] - down_fetch = DownloadJob(context, 'down_fetch', down_rev, - _GetDownloadPath(down_rev)) - down_fetch.Start() - - up_pivot = int((maxrev - pivot) / 2) + pivot - up_fetch = None - if up_pivot != pivot and up_pivot != maxrev: - up_rev = revlist[up_pivot] - up_fetch = DownloadJob(context, 'up_fetch', up_rev, - _GetDownloadPath(up_rev)) - up_fetch.Start() - - # Run test on the pivot revision. - status = None - stdout = None - stderr = None - try: - (status, stdout, stderr) = RunRevision(context, - rev, - fetch.zipfile, - profile, - num_runs, - command, - try_args) - except Exception, e: - print >> sys.stderr, e - - # Call the evaluate function to see if the current revision is good or bad. - # On that basis, kill one of the background downloads and complete the - # other, as described in the comments above. - try: - answer = evaluate(rev, official_builds, status, stdout, stderr) - if answer == 'g' and good_rev < bad_rev or \ - answer == 'b' and bad_rev < good_rev: - fetch.Stop() - minrev = pivot - if down_fetch: - down_fetch.Stop() # Kill the download of the older revision. - fetch = None - if up_fetch: - up_fetch.WaitFor() - pivot = up_pivot - fetch = up_fetch - elif answer == 'b' and good_rev < bad_rev or \ - answer == 'g' and bad_rev < good_rev: - fetch.Stop() - maxrev = pivot - if up_fetch: - up_fetch.Stop() # Kill the download of the newer revision. - fetch = None - if down_fetch: - down_fetch.WaitFor() - pivot = down_pivot - fetch = down_fetch - elif answer == 'r': - pass # Retry requires no changes. - elif answer == 'u': - # Nuke the revision from the revlist and choose a new pivot. - fetch.Stop() - revlist.pop(pivot) - maxrev -= 1 # Assumes maxrev >= pivot. - - if maxrev - minrev > 1: - # Alternate between using down_pivot or up_pivot for the new pivot - # point, without affecting the range. Do this instead of setting the - # pivot to the midpoint of the new range because adjacent revisions - # are likely affected by the same issue that caused the (u)nknown - # response. - if up_fetch and down_fetch: - fetch = [up_fetch, down_fetch][len(revlist) % 2] - elif up_fetch: - fetch = up_fetch - else: - fetch = down_fetch - fetch.WaitFor() - if fetch == up_fetch: - pivot = up_pivot - 1 # Subtracts 1 because revlist was resized. - else: - pivot = down_pivot - zipfile = fetch.zipfile - - if down_fetch and fetch != down_fetch: - down_fetch.Stop() - if up_fetch and fetch != up_fetch: - up_fetch.Stop() - else: - assert False, "Unexpected return value from evaluate(): " + answer - except SystemExit: - print "Cleaning up..." - for f in [_GetDownloadPath(revlist[down_pivot]), - _GetDownloadPath(revlist[up_pivot])]: - try: - os.unlink(f) - except OSError: - pass - sys.exit(0) - - rev = revlist[pivot] - - return (revlist[minrev], revlist[maxrev]) - - -def GetBlinkDEPSRevisionForChromiumRevision(rev): - """Returns the blink revision that was in REVISIONS file at - chromium revision |rev|.""" - # . doesn't match newlines without re.DOTALL, so this is safe. - blink_re = re.compile(r'webkit_revision\D*(\d+)') - url = urllib.urlopen(DEPS_FILE % rev) - m = blink_re.search(url.read()) - url.close() - if m: - return int(m.group(1)) - else: - raise Exception('Could not get Blink revision for Chromium rev %d' - % rev) - - -def GetBlinkRevisionForChromiumRevision(self, rev): - """Returns the blink revision that was in REVISIONS file at - chromium revision |rev|.""" - file_url = "%s/%s%d/REVISIONS" % (self.base_url, - self._listing_platform_dir, rev) - url = urllib.urlopen(file_url) - data = json.loads(url.read()) - url.close() - if 'webkit_revision' in data: - return data['webkit_revision'] - else: - raise Exception('Could not get blink revision for cr rev %d' % rev) - -def FixChromiumRevForBlink(revisions_final, revisions, self, rev): - """Returns the chromium revision that has the correct blink revision - for blink bisect, DEPS and REVISIONS file might not match since - blink snapshots point to tip of tree blink. - Note: The revisions_final variable might get modified to include - additional revisions.""" - - blink_deps_rev = GetBlinkDEPSRevisionForChromiumRevision(rev) - - while (GetBlinkRevisionForChromiumRevision(self, rev) > blink_deps_rev): - idx = revisions.index(rev) - if idx > 0: - rev = revisions[idx-1] - if rev not in revisions_final: - revisions_final.insert(0, rev) - - revisions_final.sort() - return rev - -def GetChromiumRevision(url): - """Returns the chromium revision read from given URL.""" - try: - # Location of the latest build revision number - return int(urllib.urlopen(url).read()) - except Exception, e: - print('Could not determine latest revision. This could be bad...') - return 999999999 - - -def main(): - usage = ('%prog [options] [-- chromium-options]\n' - 'Perform binary search on the snapshot builds to find a minimal\n' - 'range of revisions where a behavior change happened. The\n' - 'behaviors are described as "good" and "bad".\n' - 'It is NOT assumed that the behavior of the later revision is\n' - 'the bad one.\n' - '\n' - 'Revision numbers should use\n' - ' Official versions (e.g. 1.0.1000.0) for official builds. (-o)\n' - ' SVN revisions (e.g. 123456) for chromium builds, from trunk.\n' - ' Use base_trunk_revision from http://omahaproxy.appspot.com/\n' - ' for earlier revs.\n' - ' Chrome\'s about: build number and omahaproxy branch_revision\n' - ' are incorrect, they are from branches.\n' - '\n' - 'Tip: add "-- --no-first-run" to bypass the first run prompts.') - parser = optparse.OptionParser(usage=usage) - # Strangely, the default help output doesn't include the choice list. - choices = ['mac', 'win', 'linux', 'linux64', 'linux-arm'] - # linux-chromiumos lacks a continuous archive http://crbug.com/78158 - parser.add_option('-a', '--archive', - choices = choices, - help = 'The buildbot archive to bisect [%s].' % - '|'.join(choices)) - parser.add_option('-o', action="store_true", dest='official_builds', - help = 'Bisect across official ' + - 'Chrome builds (internal only) instead of ' + - 'Chromium archives.') - parser.add_option('-b', '--bad', type = 'str', - help = 'A bad revision to start bisection. ' + - 'May be earlier or later than the good revision. ' + - 'Default is HEAD.') - parser.add_option('-f', '--flash_path', type = 'str', - help = 'Absolute path to a recent Adobe Pepper Flash ' + - 'binary to be used in this bisection (e.g. ' + - 'on Windows C:\...\pepflashplayer.dll and on Linux ' + - '/opt/google/chrome/PepperFlash/libpepflashplayer.so).') - parser.add_option('-g', '--good', type = 'str', - help = 'A good revision to start bisection. ' + - 'May be earlier or later than the bad revision. ' + - 'Default is 0.') - parser.add_option('-p', '--profile', '--user-data-dir', type = 'str', - help = 'Profile to use; this will not reset every run. ' + - 'Defaults to a clean profile.', default = 'profile') - parser.add_option('-t', '--times', type = 'int', - help = 'Number of times to run each build before asking ' + - 'if it\'s good or bad. Temporary profiles are reused.', - default = 1) - parser.add_option('-c', '--command', type = 'str', - help = 'Command to execute. %p and %a refer to Chrome ' + - 'executable and specified extra arguments respectively. ' + - 'Use %s to specify all extra arguments as one string. ' + - 'Defaults to "%p %a". Note that any extra paths ' + - 'specified should be absolute.', - default = '%p %a') - parser.add_option('-l', '--blink', action='store_true', - help = 'Use Blink bisect instead of Chromium. ') - parser.add_option('--aura', - dest='aura', - action='store_true', - default=False, - help='Allow the script to bisect aura builds') - - (opts, args) = parser.parse_args() - - if opts.archive is None: - print 'Error: missing required parameter: --archive' - print - parser.print_help() - return 1 - - if opts.aura: - if opts.archive != 'win' or not opts.official_builds: - print 'Error: Aura is supported only on Windows platform '\ - 'and official builds.' - return 1 - - if opts.blink: - base_url = WEBKIT_BASE_URL - else: - base_url = CHROMIUM_BASE_URL - - # Create the context. Initialize 0 for the revisions as they are set below. - context = PathContext(base_url, opts.archive, 0, 0, - opts.official_builds, opts.aura, None) - # Pick a starting point, try to get HEAD for this. - if opts.bad: - bad_rev = opts.bad - else: - bad_rev = '999.0.0.0' - if not opts.official_builds: - bad_rev = GetChromiumRevision(context.GetLastChangeURL()) - - # Find out when we were good. - if opts.good: - good_rev = opts.good - else: - good_rev = '0.0.0.0' if opts.official_builds else 0 - - if opts.flash_path: - flash_path = opts.flash_path - msg = 'Could not find Flash binary at %s' % flash_path - assert os.path.exists(flash_path), msg - - if opts.official_builds: - good_rev = LooseVersion(good_rev) - bad_rev = LooseVersion(bad_rev) - else: - good_rev = int(good_rev) - bad_rev = int(bad_rev) - - if opts.times < 1: - print('Number of times to run (%d) must be greater than or equal to 1.' % - opts.times) - parser.print_help() - return 1 - - (min_chromium_rev, max_chromium_rev) = Bisect( - base_url, opts.archive, opts.official_builds, opts.aura, good_rev, - bad_rev, opts.times, opts.command, args, opts.profile, opts.flash_path) - - # Get corresponding blink revisions. - try: - min_blink_rev = GetBlinkRevisionForChromiumRevision(context, - min_chromium_rev) - max_blink_rev = GetBlinkRevisionForChromiumRevision(context, - max_chromium_rev) - except Exception, e: - # Silently ignore the failure. - min_blink_rev, max_blink_rev = 0, 0 - - if opts.blink: - # We're done. Let the user know the results in an official manner. - if good_rev > bad_rev: - print DONE_MESSAGE_GOOD_MAX % (str(min_blink_rev), str(max_blink_rev)) - else: - print DONE_MESSAGE_GOOD_MIN % (str(min_blink_rev), str(max_blink_rev)) - - print 'BLINK CHANGELOG URL:' - print ' ' + BLINK_CHANGELOG_URL % (max_blink_rev, min_blink_rev) - - else: - # We're done. Let the user know the results in an official manner. - if good_rev > bad_rev: - print DONE_MESSAGE_GOOD_MAX % (str(min_chromium_rev), - str(max_chromium_rev)) - else: - print DONE_MESSAGE_GOOD_MIN % (str(min_chromium_rev), - str(max_chromium_rev)) - if min_blink_rev != max_blink_rev: - print ("NOTE: There is a Blink roll in the range, " - "you might also want to do a Blink bisect.") - - print 'CHANGELOG URL:' - if opts.official_builds: - print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) - else: - print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/bisect-manual-test.py b/chromium/tools/bisect-manual-test.py deleted file mode 100755 index 81519cb0cf4..00000000000 --- a/chromium/tools/bisect-manual-test.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Simple script which asks user to manually check result of bisection. - -Typically used as by the run-bisect-manual-test.py script. -""" - -import os -import sys - -sys.path.append(os.path.join(os.path.dirname(__file__), 'telemetry')) -from telemetry.core import browser_finder -from telemetry.core import browser_options - - -def _StartManualTest(options): - """Start browser then ask the user whether build is good or bad.""" - browser_to_create = browser_finder.FindBrowser(options) - print 'Starting browser: %s.' % options.browser_type - with browser_to_create.Create() as browser: - browser.Start(); - - # Loop until we get a response that we can parse. - while True: - sys.stderr.write('Revision is [(g)ood/(b)ad]: ') - response = raw_input() - if response and response in ('g', 'b'): - if response in ('g'): - print "RESULT manual_test: manual_test= 1" - else: - print "RESULT manual_test: manual_test= 0" - break - - browser.Close() - - -def main(): - usage = ('%prog [options]\n' - 'Starts browser with an optional url and asks user whether ' - 'revision is good or bad.\n') - - options = browser_options.BrowserFinderOptions() - parser = options.CreateParser(usage) - options, args = parser.parse_args() - - _StartManualTest(options) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/bisect-perf-regression.py b/chromium/tools/bisect-perf-regression.py deleted file mode 100755 index fa087b6e97f..00000000000 --- a/chromium/tools/bisect-perf-regression.py +++ /dev/null @@ -1,2948 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Performance Test Bisect Tool - -This script bisects a series of changelists using binary search. It starts at -a bad revision where a performance metric has regressed, and asks for a last -known-good revision. It will then binary search across this revision range by -syncing, building, and running a performance test. If the change is -suspected to occur as a result of WebKit/V8 changes, the script will -further bisect changes to those depots and attempt to narrow down the revision -range. - - -An example usage (using svn cl's): - -./tools/bisect-perf-regression.py -c\ -"out/Release/performance_ui_tests --gtest_filter=ShutdownTest.SimpleUserQuit"\ --g 168222 -b 168232 -m shutdown/simple-user-quit - -Be aware that if you're using the git workflow and specify an svn revision, -the script will attempt to find the git SHA1 where svn changes up to that -revision were merged in. - - -An example usage (using git hashes): - -./tools/bisect-perf-regression.py -c\ -"out/Release/performance_ui_tests --gtest_filter=ShutdownTest.SimpleUserQuit"\ --g 1f6e67861535121c5c819c16a666f2436c207e7b\ --b b732f23b4f81c382db0b23b9035f3dadc7d925bb\ --m shutdown/simple-user-quit - -""" - -import copy -import datetime -import errno -import imp -import math -import optparse -import os -import re -import shlex -import shutil -import StringIO -import subprocess -import sys -import time - -import bisect_utils - - -# The additional repositories that might need to be bisected. -# If the repository has any dependant repositories (such as skia/src needs -# skia/include and skia/gyp to be updated), specify them in the 'depends' -# so that they're synced appropriately. -# Format is: -# src: path to the working directory. -# recurse: True if this repositry will get bisected. -# depends: A list of other repositories that are actually part of the same -# repository in svn. -# svn: Needed for git workflow to resolve hashes to svn revisions. -# from: Parent depot that must be bisected before this is bisected. -DEPOT_DEPS_NAME = { - 'chromium' : { - "src" : "src", - "recurse" : True, - "depends" : None, - "from" : ['cros', 'android-chrome'], - 'viewvc': 'http://src.chromium.org/viewvc/chrome?view=revision&revision=' - }, - 'webkit' : { - "src" : "src/third_party/WebKit", - "recurse" : True, - "depends" : None, - "from" : ['chromium'], - 'viewvc': 'http://src.chromium.org/viewvc/blink?view=revision&revision=' - }, - 'angle' : { - "src" : "src/third_party/angle", - "src_old" : "src/third_party/angle_dx11", - "recurse" : True, - "depends" : None, - "from" : ['chromium'], - "platform": 'nt', - }, - 'v8' : { - "src" : "src/v8", - "recurse" : True, - "depends" : None, - "from" : ['chromium'], - "custom_deps": bisect_utils.GCLIENT_CUSTOM_DEPS_V8, - 'viewvc': 'https://code.google.com/p/v8/source/detail?r=', - }, - 'v8_bleeding_edge' : { - "src" : "src/v8_bleeding_edge", - "recurse" : True, - "depends" : None, - "svn": "https://v8.googlecode.com/svn/branches/bleeding_edge", - "from" : ['v8'], - 'viewvc': 'https://code.google.com/p/v8/source/detail?r=', - }, - 'skia/src' : { - "src" : "src/third_party/skia/src", - "recurse" : True, - "svn" : "http://skia.googlecode.com/svn/trunk/src", - "depends" : ['skia/include', 'skia/gyp'], - "from" : ['chromium'], - 'viewvc': 'https://code.google.com/p/skia/source/detail?r=', - }, - 'skia/include' : { - "src" : "src/third_party/skia/include", - "recurse" : False, - "svn" : "http://skia.googlecode.com/svn/trunk/include", - "depends" : None, - "from" : ['chromium'], - 'viewvc': 'https://code.google.com/p/skia/source/detail?r=', - }, - 'skia/gyp' : { - "src" : "src/third_party/skia/gyp", - "recurse" : False, - "svn" : "http://skia.googlecode.com/svn/trunk/gyp", - "depends" : None, - "from" : ['chromium'], - 'viewvc': 'https://code.google.com/p/skia/source/detail?r=', - }, -} - -DEPOT_NAMES = DEPOT_DEPS_NAME.keys() -CROS_SDK_PATH = os.path.join('..', 'cros', 'chromite', 'bin', 'cros_sdk') -CROS_VERSION_PATTERN = 'new version number from %s' -CROS_CHROMEOS_PATTERN = 'chromeos-base/chromeos-chrome' -CROS_TEST_KEY_PATH = os.path.join('..', 'cros', 'chromite', 'ssh_keys', - 'testing_rsa') -CROS_SCRIPT_KEY_PATH = os.path.join('..', 'cros', 'src', 'scripts', - 'mod_for_test_scripts', 'ssh_keys', - 'testing_rsa') - -BUILD_RESULT_SUCCEED = 0 -BUILD_RESULT_FAIL = 1 -BUILD_RESULT_SKIPPED = 2 - - -def _AddAdditionalDepotInfo(depot_info): - """Adds additional depot info to the global depot variables.""" - global DEPOT_DEPS_NAME - global DEPOT_NAMES - DEPOT_DEPS_NAME = dict(DEPOT_DEPS_NAME.items() + - depot_info.items()) - DEPOT_NAMES = DEPOT_DEPS_NAME.keys() - - -def CalculateTruncatedMean(data_set, truncate_percent): - """Calculates the truncated mean of a set of values. - - Args: - data_set: Set of values to use in calculation. - truncate_percent: The % from the upper/lower portions of the data set to - discard, expressed as a value in [0, 1]. - - Returns: - The truncated mean as a float. - """ - if len(data_set) > 2: - data_set = sorted(data_set) - - discard_num_float = len(data_set) * truncate_percent - discard_num_int = int(math.floor(discard_num_float)) - kept_weight = len(data_set) - discard_num_float * 2 - - data_set = data_set[discard_num_int:len(data_set)-discard_num_int] - - weight_left = 1.0 - (discard_num_float - discard_num_int) - - if weight_left < 1: - # If the % to discard leaves a fractional portion, need to weight those - # values. - unweighted_vals = data_set[1:len(data_set)-1] - weighted_vals = [data_set[0], data_set[len(data_set)-1]] - weighted_vals = [w * weight_left for w in weighted_vals] - data_set = weighted_vals + unweighted_vals - else: - kept_weight = len(data_set) - - truncated_mean = reduce(lambda x, y: float(x) + float(y), - data_set) / kept_weight - - return truncated_mean - - -def CalculateStandardDeviation(v): - if len(v) == 1: - return 0.0 - - mean = CalculateTruncatedMean(v, 0.0) - variances = [float(x) - mean for x in v] - variances = [x * x for x in variances] - variance = reduce(lambda x, y: float(x) + float(y), variances) / (len(v) - 1) - std_dev = math.sqrt(variance) - - return std_dev - - -def CalculatePooledStandardError(work_sets): - numerator = 0.0 - denominator1 = 0.0 - denominator2 = 0.0 - - for current_set in work_sets: - std_dev = CalculateStandardDeviation(current_set) - numerator += (len(current_set) - 1) * std_dev ** 2 - denominator1 += len(current_set) - 1 - denominator2 += 1.0 / len(current_set) - - if denominator1: - return math.sqrt(numerator / denominator1) * math.sqrt(denominator2) - return 0.0 - - -def CalculateStandardError(v): - if len(v) <= 1: - return 0.0 - - std_dev = CalculateStandardDeviation(v) - - return std_dev / math.sqrt(len(v)) - - -def IsStringFloat(string_to_check): - """Checks whether or not the given string can be converted to a floating - point number. - - Args: - string_to_check: Input string to check if it can be converted to a float. - - Returns: - True if the string can be converted to a float. - """ - try: - float(string_to_check) - - return True - except ValueError: - return False - - -def IsStringInt(string_to_check): - """Checks whether or not the given string can be converted to a integer. - - Args: - string_to_check: Input string to check if it can be converted to an int. - - Returns: - True if the string can be converted to an int. - """ - try: - int(string_to_check) - - return True - except ValueError: - return False - - -def IsWindows(): - """Checks whether or not the script is running on Windows. - - Returns: - True if running on Windows. - """ - return os.name == 'nt' - - -def RunProcess(command): - """Run an arbitrary command. If output from the call is needed, use - RunProcessAndRetrieveOutput instead. - - Args: - command: A list containing the command and args to execute. - - Returns: - The return code of the call. - """ - # On Windows, use shell=True to get PATH interpretation. - shell = IsWindows() - return subprocess.call(command, shell=shell) - - -def RunProcessAndRetrieveOutput(command, cwd=None): - """Run an arbitrary command, returning its output and return code. Since - output is collected via communicate(), there will be no output until the - call terminates. If you need output while the program runs (ie. so - that the buildbot doesn't terminate the script), consider RunProcess(). - - Args: - command: A list containing the command and args to execute. - - Returns: - A tuple of the output and return code. - """ - # On Windows, use shell=True to get PATH interpretation. - shell = IsWindows() - proc = subprocess.Popen(command, shell=shell, stdout=subprocess.PIPE, cwd=cwd) - - (output, _) = proc.communicate() - - return (output, proc.returncode) - - -def RunGit(command, cwd=None): - """Run a git subcommand, returning its output and return code. - - Args: - command: A list containing the args to git. - - Returns: - A tuple of the output and return code. - """ - command = ['git'] + command - - return RunProcessAndRetrieveOutput(command, cwd=cwd) - - -def CheckRunGit(command, cwd=None): - """Run a git subcommand, returning its output and return code. Asserts if - the return code of the call is non-zero. - - Args: - command: A list containing the args to git. - - Returns: - A tuple of the output and return code. - """ - (output, return_code) = RunGit(command, cwd=cwd) - - assert not return_code, 'An error occurred while running'\ - ' "git %s"' % ' '.join(command) - return output - - -def SetBuildSystemDefault(build_system): - """Sets up any environment variables needed to build with the specified build - system. - - Args: - build_system: A string specifying build system. Currently only 'ninja' or - 'make' are supported.""" - if build_system == 'ninja': - gyp_var = os.getenv('GYP_GENERATORS') - - if not gyp_var or not 'ninja' in gyp_var: - if gyp_var: - os.environ['GYP_GENERATORS'] = gyp_var + ',ninja' - else: - os.environ['GYP_GENERATORS'] = 'ninja' - - if IsWindows(): - os.environ['GYP_DEFINES'] = 'component=shared_library '\ - 'incremental_chrome_dll=1 disable_nacl=1 fastbuild=1 '\ - 'chromium_win_pch=0' - elif build_system == 'make': - os.environ['GYP_GENERATORS'] = 'make' - else: - raise RuntimeError('%s build not supported.' % build_system) - - -def BuildWithMake(threads, targets): - cmd = ['make', 'BUILDTYPE=Release'] - - if threads: - cmd.append('-j%d' % threads) - - cmd += targets - - return_code = RunProcess(cmd) - - return not return_code - - -def BuildWithNinja(threads, targets): - cmd = ['ninja', '-C', os.path.join('out', 'Release')] - - if threads: - cmd.append('-j%d' % threads) - - cmd += targets - - return_code = RunProcess(cmd) - - return not return_code - - -def BuildWithVisualStudio(targets): - path_to_devenv = os.path.abspath( - os.path.join(os.environ['VS100COMNTOOLS'], '..', 'IDE', 'devenv.com')) - path_to_sln = os.path.join(os.getcwd(), 'chrome', 'chrome.sln') - cmd = [path_to_devenv, '/build', 'Release', path_to_sln] - - for t in targets: - cmd.extend(['/Project', t]) - - return_code = RunProcess(cmd) - - return not return_code - - -class Builder(object): - """Builder is used by the bisect script to build relevant targets and deploy. - """ - def __init__(self, opts): - """Performs setup for building with target build system. - - Args: - opts: Options parsed from command line. - """ - if IsWindows(): - if not opts.build_preference: - opts.build_preference = 'msvs' - - if opts.build_preference == 'msvs': - if not os.getenv('VS100COMNTOOLS'): - raise RuntimeError( - 'Path to visual studio could not be determined.') - else: - SetBuildSystemDefault(opts.build_preference) - else: - if not opts.build_preference: - if 'ninja' in os.getenv('GYP_GENERATORS'): - opts.build_preference = 'ninja' - else: - opts.build_preference = 'make' - - SetBuildSystemDefault(opts.build_preference) - - if not bisect_utils.SetupPlatformBuildEnvironment(opts): - raise RuntimeError('Failed to set platform environment.') - - bisect_utils.RunGClient(['runhooks']) - - @staticmethod - def FromOpts(opts): - builder = None - if opts.target_platform == 'cros': - builder = CrosBuilder(opts) - elif opts.target_platform == 'android': - builder = AndroidBuilder(opts) - elif opts.target_platform == 'android-chrome': - builder = AndroidChromeBuilder(opts) - else: - builder = DesktopBuilder(opts) - return builder - - def Build(self, depot, opts): - raise NotImplementedError() - - -class DesktopBuilder(Builder): - """DesktopBuilder is used to build Chromium on linux/mac/windows.""" - def __init__(self, opts): - super(DesktopBuilder, self).__init__(opts) - - def Build(self, depot, opts): - """Builds chromium_builder_perf target using options passed into - the script. - - Args: - depot: Current depot being bisected. - opts: The options parsed from the command line. - - Returns: - True if build was successful. - """ - targets = ['chromium_builder_perf'] - - threads = None - if opts.use_goma: - threads = 64 - - build_success = False - if opts.build_preference == 'make': - build_success = BuildWithMake(threads, targets) - elif opts.build_preference == 'ninja': - build_success = BuildWithNinja(threads, targets) - elif opts.build_preference == 'msvs': - assert IsWindows(), 'msvs is only supported on Windows.' - build_success = BuildWithVisualStudio(targets) - else: - assert False, 'No build system defined.' - return build_success - - -class AndroidBuilder(Builder): - """AndroidBuilder is used to build on android.""" - def __init__(self, opts): - super(AndroidBuilder, self).__init__(opts) - - def _GetTargets(self): - return ['chromium_testshell', 'cc_perftests_apk', 'android_tools'] - - def Build(self, depot, opts): - """Builds the android content shell and other necessary tools using options - passed into the script. - - Args: - depot: Current depot being bisected. - opts: The options parsed from the command line. - - Returns: - True if build was successful. - """ - threads = None - if opts.use_goma: - threads = 64 - - build_success = False - if opts.build_preference == 'ninja': - build_success = BuildWithNinja(threads, self._GetTargets()) - else: - assert False, 'No build system defined.' - - return build_success - - -class AndroidChromeBuilder(AndroidBuilder): - """AndroidBuilder is used to build on android's chrome.""" - def __init__(self, opts): - super(AndroidChromeBuilder, self).__init__(opts) - - def _GetTargets(self): - return AndroidBuilder._GetTargets(self) + ['chrome_apk'] - - -class CrosBuilder(Builder): - """CrosBuilder is used to build and image ChromeOS/Chromium when cros is the - target platform.""" - def __init__(self, opts): - super(CrosBuilder, self).__init__(opts) - - def ImageToTarget(self, opts): - """Installs latest image to target specified by opts.cros_remote_ip. - - Args: - opts: Program options containing cros_board and cros_remote_ip. - - Returns: - True if successful. - """ - try: - # Keys will most likely be set to 0640 after wiping the chroot. - os.chmod(CROS_SCRIPT_KEY_PATH, 0600) - os.chmod(CROS_TEST_KEY_PATH, 0600) - cmd = [CROS_SDK_PATH, '--', './bin/cros_image_to_target.py', - '--remote=%s' % opts.cros_remote_ip, - '--board=%s' % opts.cros_board, '--test', '--verbose'] - - return_code = RunProcess(cmd) - return not return_code - except OSError, e: - return False - - def BuildPackages(self, opts, depot): - """Builds packages for cros. - - Args: - opts: Program options containing cros_board. - depot: The depot being bisected. - - Returns: - True if successful. - """ - cmd = [CROS_SDK_PATH] - - if depot != 'cros': - path_to_chrome = os.path.join(os.getcwd(), '..') - cmd += ['--chrome_root=%s' % path_to_chrome] - - cmd += ['--'] - - if depot != 'cros': - cmd += ['CHROME_ORIGIN=LOCAL_SOURCE'] - - cmd += ['BUILDTYPE=Release', './build_packages', - '--board=%s' % opts.cros_board] - return_code = RunProcess(cmd) - - return not return_code - - def BuildImage(self, opts, depot): - """Builds test image for cros. - - Args: - opts: Program options containing cros_board. - depot: The depot being bisected. - - Returns: - True if successful. - """ - cmd = [CROS_SDK_PATH] - - if depot != 'cros': - path_to_chrome = os.path.join(os.getcwd(), '..') - cmd += ['--chrome_root=%s' % path_to_chrome] - - cmd += ['--'] - - if depot != 'cros': - cmd += ['CHROME_ORIGIN=LOCAL_SOURCE'] - - cmd += ['BUILDTYPE=Release', '--', './build_image', - '--board=%s' % opts.cros_board, 'test'] - - return_code = RunProcess(cmd) - - return not return_code - - def Build(self, depot, opts): - """Builds targets using options passed into the script. - - Args: - depot: Current depot being bisected. - opts: The options parsed from the command line. - - Returns: - True if build was successful. - """ - if self.BuildPackages(opts, depot): - if self.BuildImage(opts, depot): - return self.ImageToTarget(opts) - return False - - -class SourceControl(object): - """SourceControl is an abstraction over the underlying source control - system used for chromium. For now only git is supported, but in the - future, the svn workflow could be added as well.""" - def __init__(self): - super(SourceControl, self).__init__() - - def SyncToRevisionWithGClient(self, revision): - """Uses gclient to sync to the specified revision. - - ie. gclient sync --revision - - Args: - revision: The git SHA1 or svn CL (depending on workflow). - - Returns: - The return code of the call. - """ - return bisect_utils.RunGClient(['sync', '--revision', - revision, '--verbose', '--nohooks', '--reset', '--force']) - - def SyncToRevisionWithRepo(self, timestamp): - """Uses repo to sync all the underlying git depots to the specified - time. - - Args: - timestamp: The unix timestamp to sync to. - - Returns: - The return code of the call. - """ - return bisect_utils.RunRepoSyncAtTimestamp(timestamp) - - -class GitSourceControl(SourceControl): - """GitSourceControl is used to query the underlying source control. """ - def __init__(self, opts): - super(GitSourceControl, self).__init__() - self.opts = opts - - def IsGit(self): - return True - - def GetRevisionList(self, revision_range_end, revision_range_start, cwd=None): - """Retrieves a list of revisions between |revision_range_start| and - |revision_range_end|. - - Args: - revision_range_end: The SHA1 for the end of the range. - revision_range_start: The SHA1 for the beginning of the range. - - Returns: - A list of the revisions between |revision_range_start| and - |revision_range_end| (inclusive). - """ - revision_range = '%s..%s' % (revision_range_start, revision_range_end) - cmd = ['log', '--format=%H', '-10000', '--first-parent', revision_range] - log_output = CheckRunGit(cmd, cwd=cwd) - - revision_hash_list = log_output.split() - revision_hash_list.append(revision_range_start) - - return revision_hash_list - - def SyncToRevision(self, revision, sync_client=None): - """Syncs to the specified revision. - - Args: - revision: The revision to sync to. - use_gclient: Specifies whether or not we should sync using gclient or - just use source control directly. - - Returns: - True if successful. - """ - - if not sync_client: - results = RunGit(['checkout', revision])[1] - elif sync_client == 'gclient': - results = self.SyncToRevisionWithGClient(revision) - elif sync_client == 'repo': - results = self.SyncToRevisionWithRepo(revision) - - return not results - - def ResolveToRevision(self, revision_to_check, depot, search, cwd=None): - """If an SVN revision is supplied, try to resolve it to a git SHA1. - - Args: - revision_to_check: The user supplied revision string that may need to be - resolved to a git SHA1. - depot: The depot the revision_to_check is from. - search: The number of changelists to try if the first fails to resolve - to a git hash. If the value is negative, the function will search - backwards chronologically, otherwise it will search forward. - - Returns: - A string containing a git SHA1 hash, otherwise None. - """ - # Android-chrome is git only, so no need to resolve this to anything else. - if depot == 'android-chrome': - return revision_to_check - - if depot != 'cros': - if not IsStringInt(revision_to_check): - return revision_to_check - - depot_svn = 'svn://svn.chromium.org/chrome/trunk/src' - - if depot != 'chromium': - depot_svn = DEPOT_DEPS_NAME[depot]['svn'] - - svn_revision = int(revision_to_check) - git_revision = None - - if search > 0: - search_range = xrange(svn_revision, svn_revision + search, 1) - else: - search_range = xrange(svn_revision, svn_revision + search, -1) - - for i in search_range: - svn_pattern = 'git-svn-id: %s@%d' % (depot_svn, i) - cmd = ['log', '--format=%H', '-1', '--grep', svn_pattern, - 'origin/master'] - - (log_output, return_code) = RunGit(cmd, cwd=cwd) - - assert not return_code, 'An error occurred while running'\ - ' "git %s"' % ' '.join(cmd) - - if not return_code: - log_output = log_output.strip() - - if log_output: - git_revision = log_output - - break - - return git_revision - else: - if IsStringInt(revision_to_check): - return int(revision_to_check) - else: - cwd = os.getcwd() - os.chdir(os.path.join(os.getcwd(), 'src', 'third_party', - 'chromiumos-overlay')) - pattern = CROS_VERSION_PATTERN % revision_to_check - cmd = ['log', '--format=%ct', '-1', '--grep', pattern] - - git_revision = None - - log_output = CheckRunGit(cmd, cwd=cwd) - if log_output: - git_revision = log_output - git_revision = int(log_output.strip()) - os.chdir(cwd) - - return git_revision - - def IsInProperBranch(self): - """Confirms they're in the master branch for performing the bisection. - This is needed or gclient will fail to sync properly. - - Returns: - True if the current branch on src is 'master' - """ - cmd = ['rev-parse', '--abbrev-ref', 'HEAD'] - log_output = CheckRunGit(cmd) - log_output = log_output.strip() - - return log_output == "master" - - def SVNFindRev(self, revision): - """Maps directly to the 'git svn find-rev' command. - - Args: - revision: The git SHA1 to use. - - Returns: - An integer changelist #, otherwise None. - """ - - cmd = ['svn', 'find-rev', revision] - - output = CheckRunGit(cmd) - svn_revision = output.strip() - - if IsStringInt(svn_revision): - return int(svn_revision) - - return None - - def QueryRevisionInfo(self, revision, cwd=None): - """Gathers information on a particular revision, such as author's name, - email, subject, and date. - - Args: - revision: Revision you want to gather information on. - Returns: - A dict in the following format: - { - 'author': %s, - 'email': %s, - 'date': %s, - 'subject': %s, - 'body': %s, - } - """ - commit_info = {} - - formats = ['%cN', '%cE', '%s', '%cD', '%b'] - targets = ['author', 'email', 'subject', 'date', 'body'] - - for i in xrange(len(formats)): - cmd = ['log', '--format=%s' % formats[i], '-1', revision] - output = CheckRunGit(cmd, cwd=cwd) - commit_info[targets[i]] = output.rstrip() - - return commit_info - - def CheckoutFileAtRevision(self, file_name, revision, cwd=None): - """Performs a checkout on a file at the given revision. - - Returns: - True if successful. - """ - return not RunGit(['checkout', revision, file_name], cwd=cwd)[1] - - def RevertFileToHead(self, file_name): - """Unstages a file and returns it to HEAD. - - Returns: - True if successful. - """ - # Reset doesn't seem to return 0 on success. - RunGit(['reset', 'HEAD', bisect_utils.FILE_DEPS_GIT]) - - return not RunGit(['checkout', bisect_utils.FILE_DEPS_GIT])[1] - - def QueryFileRevisionHistory(self, filename, revision_start, revision_end): - """Returns a list of commits that modified this file. - - Args: - filename: Name of file. - revision_start: Start of revision range. - revision_end: End of revision range. - - Returns: - Returns a list of commits that touched this file. - """ - cmd = ['log', '--format=%H', '%s~1..%s' % (revision_start, revision_end), - filename] - output = CheckRunGit(cmd) - - return [o for o in output.split('\n') if o] - -class BisectPerformanceMetrics(object): - """BisectPerformanceMetrics performs a bisection against a list of range - of revisions to narrow down where performance regressions may have - occurred.""" - - def __init__(self, source_control, opts): - super(BisectPerformanceMetrics, self).__init__() - - self.opts = opts - self.source_control = source_control - self.src_cwd = os.getcwd() - self.cros_cwd = os.path.join(os.getcwd(), '..', 'cros') - self.depot_cwd = {} - self.cleanup_commands = [] - self.warnings = [] - self.builder = Builder.FromOpts(opts) - - # This always starts true since the script grabs latest first. - self.was_blink = True - - for d in DEPOT_NAMES: - # The working directory of each depot is just the path to the depot, but - # since we're already in 'src', we can skip that part. - - self.depot_cwd[d] = os.path.join( - self.src_cwd, DEPOT_DEPS_NAME[d]['src'][4:]) - - def PerformCleanup(self): - """Performs cleanup when script is finished.""" - os.chdir(self.src_cwd) - for c in self.cleanup_commands: - if c[0] == 'mv': - shutil.move(c[1], c[2]) - else: - assert False, 'Invalid cleanup command.' - - def GetRevisionList(self, depot, bad_revision, good_revision): - """Retrieves a list of all the commits between the bad revision and - last known good revision.""" - - revision_work_list = [] - - if depot == 'cros': - revision_range_start = good_revision - revision_range_end = bad_revision - - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory('cros') - - # Print the commit timestamps for every commit in the revision time - # range. We'll sort them and bisect by that. There is a remote chance that - # 2 (or more) commits will share the exact same timestamp, but it's - # probably safe to ignore that case. - cmd = ['repo', 'forall', '-c', - 'git log --format=%%ct --before=%d --after=%d' % ( - revision_range_end, revision_range_start)] - (output, return_code) = RunProcessAndRetrieveOutput(cmd) - - assert not return_code, 'An error occurred while running'\ - ' "%s"' % ' '.join(cmd) - - os.chdir(cwd) - - revision_work_list = list(set( - [int(o) for o in output.split('\n') if IsStringInt(o)])) - revision_work_list = sorted(revision_work_list, reverse=True) - else: - cwd = self._GetDepotDirectory(depot) - revision_work_list = self.source_control.GetRevisionList(bad_revision, - good_revision, cwd=cwd) - - return revision_work_list - - def _GetV8BleedingEdgeFromV8TrunkIfMappable(self, revision): - svn_revision = self.source_control.SVNFindRev(revision) - - if IsStringInt(svn_revision): - # V8 is tricky to bisect, in that there are only a few instances when - # we can dive into bleeding_edge and get back a meaningful result. - # Try to detect a V8 "business as usual" case, which is when: - # 1. trunk revision N has description "Version X.Y.Z" - # 2. bleeding_edge revision (N-1) has description "Prepare push to - # trunk. Now working on X.Y.(Z+1)." - v8_dir = self._GetDepotDirectory('v8') - v8_bleeding_edge_dir = self._GetDepotDirectory('v8_bleeding_edge') - - revision_info = self.source_control.QueryRevisionInfo(revision, - cwd=v8_dir) - - version_re = re.compile("Version (?P[0-9,.]+)") - - regex_results = version_re.search(revision_info['subject']) - - if regex_results: - version = regex_results.group('values') - - git_revision = self.source_control.ResolveToRevision( - int(svn_revision) - 1, 'v8_bleeding_edge', -1, - cwd=v8_bleeding_edge_dir) - - if git_revision: - revision_info = self.source_control.QueryRevisionInfo(git_revision, - cwd=v8_bleeding_edge_dir) - - if 'Prepare push to trunk' in revision_info['subject']: - return git_revision - return None - - def _GetNearestV8BleedingEdgeFromTrunk(self, revision, search_forward=True): - cwd = self._GetDepotDirectory('v8') - cmd = ['log', '--format=%ct', '-1', revision] - output = CheckRunGit(cmd, cwd=cwd) - commit_time = int(output) - commits = [] - - if search_forward: - cmd = ['log', '--format=%H', '-10', '--after=%d' % commit_time, - 'origin/master'] - output = CheckRunGit(cmd, cwd=cwd) - output = output.split() - commits = output - commits = reversed(commits) - else: - cmd = ['log', '--format=%H', '-10', '--before=%d' % commit_time, - 'origin/master'] - output = CheckRunGit(cmd, cwd=cwd) - output = output.split() - commits = output - - bleeding_edge_revision = None - - for c in commits: - bleeding_edge_revision = self._GetV8BleedingEdgeFromV8TrunkIfMappable(c) - if bleeding_edge_revision: - break - - return bleeding_edge_revision - - def Get3rdPartyRevisionsFromCurrentRevision(self, depot, revision): - """Parses the DEPS file to determine WebKit/v8/etc... versions. - - Returns: - A dict in the format {depot:revision} if successful, otherwise None. - """ - - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory(depot) - - results = {} - - if depot == 'chromium' or depot == 'android-chrome': - locals = {'Var': lambda _: locals["vars"][_], - 'From': lambda *args: None} - execfile(bisect_utils.FILE_DEPS_GIT, {}, locals) - - os.chdir(cwd) - - rxp = re.compile(".git@(?P[a-fA-F0-9]+)") - - for d in DEPOT_NAMES: - if DEPOT_DEPS_NAME[d].has_key('platform'): - if DEPOT_DEPS_NAME[d]['platform'] != os.name: - continue - - if (DEPOT_DEPS_NAME[d]['recurse'] and - depot in DEPOT_DEPS_NAME[d]['from']): - if (locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']) or - locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old'])): - if locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src']): - re_results = rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src']]) - self.depot_cwd[d] =\ - os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src'][4:]) - elif locals['deps'].has_key(DEPOT_DEPS_NAME[d]['src_old']): - re_results =\ - rxp.search(locals['deps'][DEPOT_DEPS_NAME[d]['src_old']]) - self.depot_cwd[d] =\ - os.path.join(self.src_cwd, DEPOT_DEPS_NAME[d]['src_old'][4:]) - - if re_results: - results[d] = re_results.group('revision') - else: - print 'Couldn\'t parse revision for %s.' % d - print - return None - else: - print 'Couldn\'t find %s while parsing .DEPS.git.' % d - print - return None - elif depot == 'cros': - cmd = [CROS_SDK_PATH, '--', 'portageq-%s' % self.opts.cros_board, - 'best_visible', '/build/%s' % self.opts.cros_board, 'ebuild', - CROS_CHROMEOS_PATTERN] - (output, return_code) = RunProcessAndRetrieveOutput(cmd) - - assert not return_code, 'An error occurred while running'\ - ' "%s"' % ' '.join(cmd) - - if len(output) > CROS_CHROMEOS_PATTERN: - output = output[len(CROS_CHROMEOS_PATTERN):] - - if len(output) > 1: - output = output.split('_')[0] - - if len(output) > 3: - contents = output.split('.') - - version = contents[2] - - if contents[3] != '0': - warningText = 'Chrome version: %s.%s but using %s.0 to bisect.' %\ - (version, contents[3], version) - if not warningText in self.warnings: - self.warnings.append(warningText) - - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory('chromium') - return_code = CheckRunGit(['log', '-1', '--format=%H', - '--author=chrome-release@google.com', '--grep=to %s' % version, - 'origin/master']) - os.chdir(cwd) - - results['chromium'] = output.strip() - elif depot == 'v8': - # We can't try to map the trunk revision to bleeding edge yet, because - # we don't know which direction to try to search in. Have to wait until - # the bisect has narrowed the results down to 2 v8 rolls. - results['v8_bleeding_edge'] = None - - return results - - def BuildCurrentRevision(self, depot): - """Builds chrome and performance_ui_tests on the current revision. - - Returns: - True if the build was successful. - """ - if self.opts.debug_ignore_build: - return True - - cwd = os.getcwd() - os.chdir(self.src_cwd) - - build_success = self.builder.Build(depot, self.opts) - - os.chdir(cwd) - - return build_success - - def RunGClientHooks(self): - """Runs gclient with runhooks command. - - Returns: - True if gclient reports no errors. - """ - - if self.opts.debug_ignore_build: - return True - - return not bisect_utils.RunGClient(['runhooks'], cwd=self.src_cwd) - - def TryParseHistogramValuesFromOutput(self, metric, text): - """Attempts to parse a metric in the format HISTOGRAM . - - Args: - metric: The metric as a list of [, ] strings. - text: The text to parse the metric values from. - - Returns: - A list of floating point numbers found. - """ - metric_formatted = 'HISTOGRAM %s: %s= ' % (metric[0], metric[1]) - - text_lines = text.split('\n') - values_list = [] - - for current_line in text_lines: - if metric_formatted in current_line: - current_line = current_line[len(metric_formatted):] - - try: - histogram_values = eval(current_line) - - for b in histogram_values['buckets']: - average_for_bucket = float(b['high'] + b['low']) * 0.5 - # Extends the list with N-elements with the average for that bucket. - values_list.extend([average_for_bucket] * b['count']) - except: - pass - - return values_list - - def TryParseResultValuesFromOutput(self, metric, text): - """Attempts to parse a metric in the format RESULT . - - Args: - metric: The metric as a list of [, ] strings. - text: The text to parse the metric values from. - - Returns: - A list of floating point numbers found. - """ - # Format is: RESULT : = - metric_formatted = re.escape('RESULT %s: %s=' % (metric[0], metric[1])) - - text_lines = text.split('\n') - values_list = [] - - for current_line in text_lines: - # Parse the output from the performance test for the metric we're - # interested in. - metric_re = metric_formatted +\ - "(\s)*(?P[0-9]+(\.[0-9]*)?)" - metric_re = re.compile(metric_re) - regex_results = metric_re.search(current_line) - - if not regex_results is None: - values_list += [regex_results.group('values')] - else: - metric_re = metric_formatted +\ - "(\s)*\[(\s)*(?P[0-9,.]+)\]" - metric_re = re.compile(metric_re) - regex_results = metric_re.search(current_line) - - if not regex_results is None: - metric_values = regex_results.group('values') - - values_list += metric_values.split(',') - - values_list = [float(v) for v in values_list if IsStringFloat(v)] - - # If the metric is times/t, we need to sum the timings in order to get - # similar regression results as the try-bots. - metrics_to_sum = [['times', 't'], ['times', 'page_load_time'], - ['cold_times', 'page_load_time'], ['warm_times', 'page_load_time']] - - if metric in metrics_to_sum: - if values_list: - values_list = [reduce(lambda x, y: float(x) + float(y), values_list)] - - return values_list - - def ParseMetricValuesFromOutput(self, metric, text): - """Parses output from performance_ui_tests and retrieves the results for - a given metric. - - Args: - metric: The metric as a list of [, ] strings. - text: The text to parse the metric values from. - - Returns: - A list of floating point numbers found. - """ - metric_values = self.TryParseResultValuesFromOutput(metric, text) - - if not metric_values: - metric_values = self.TryParseHistogramValuesFromOutput(metric, text) - - return metric_values - - def _GenerateProfileIfNecessary(self, command_args): - """Checks the command line of the performance test for dependencies on - profile generation, and runs tools/perf/generate_profile as necessary. - - Args: - command_args: Command line being passed to performance test, as a list. - - Returns: - False if profile generation was necessary and failed, otherwise True. - """ - - if '--profile-dir' in ' '.join(command_args): - # If we were using python 2.7+, we could just use the argparse - # module's parse_known_args to grab --profile-dir. Since some of the - # bots still run 2.6, have to grab the arguments manually. - arg_dict = {} - args_to_parse = ['--profile-dir', '--browser'] - - for arg_to_parse in args_to_parse: - for i, current_arg in enumerate(command_args): - if arg_to_parse in current_arg: - current_arg_split = current_arg.split('=') - - # Check 2 cases, --arg= and --arg - if len(current_arg_split) == 2: - arg_dict[arg_to_parse] = current_arg_split[1] - elif i + 1 < len(command_args): - arg_dict[arg_to_parse] = command_args[i+1] - - path_to_generate = os.path.join('tools', 'perf', 'generate_profile') - - if arg_dict.has_key('--profile-dir') and arg_dict.has_key('--browser'): - profile_path, profile_type = os.path.split(arg_dict['--profile-dir']) - return not RunProcess(['python', path_to_generate, - '--profile-type-to-generate', profile_type, - '--browser', arg_dict['--browser'], '--output-dir', profile_path]) - return False - return True - - def RunPerformanceTestAndParseResults(self, command_to_run, metric, - reset_on_first_run=False, upload_on_last_run=False, results_label=None): - """Runs a performance test on the current revision by executing the - 'command_to_run' and parses the results. - - Args: - command_to_run: The command to be run to execute the performance test. - metric: The metric to parse out from the results of the performance test. - - Returns: - On success, it will return a tuple of the average value of the metric, - and a success code of 0. - """ - - if self.opts.debug_ignore_perf_test: - return ({'mean': 0.0, 'std_err': 0.0, 'std_dev': 0.0, 'values': [0.0]}, 0) - - if IsWindows(): - command_to_run = command_to_run.replace('/', r'\\') - - args = shlex.split(command_to_run) - - if not self._GenerateProfileIfNecessary(args): - return ('Failed to generate profile for performance test.', -1) - - # If running a telemetry test for cros, insert the remote ip, and - # identity parameters. - is_telemetry = bisect_utils.IsTelemetryCommand(command_to_run) - if self.opts.target_platform == 'cros' and is_telemetry: - args.append('--remote=%s' % self.opts.cros_remote_ip) - args.append('--identity=%s' % CROS_TEST_KEY_PATH) - - cwd = os.getcwd() - os.chdir(self.src_cwd) - - start_time = time.time() - - metric_values = [] - output_of_all_runs = '' - for i in xrange(self.opts.repeat_test_count): - # Can ignore the return code since if the tests fail, it won't return 0. - try: - current_args = copy.copy(args) - if is_telemetry: - if i == 0 and reset_on_first_run: - current_args.append('--reset-results') - elif i == self.opts.repeat_test_count - 1 and upload_on_last_run: - current_args.append('--upload-results') - if results_label: - current_args.append('--results-label=%s' % results_label) - (output, return_code) = RunProcessAndRetrieveOutput(current_args) - except OSError, e: - if e.errno == errno.ENOENT: - err_text = ("Something went wrong running the performance test. " - "Please review the command line:\n\n") - if 'src/' in ' '.join(args): - err_text += ("Check that you haven't accidentally specified a path " - "with src/ in the command.\n\n") - err_text += ' '.join(args) - err_text += '\n' - - return (err_text, -1) - raise - - output_of_all_runs += output - if self.opts.output_buildbot_annotations: - print output - - metric_values += self.ParseMetricValuesFromOutput(metric, output) - - elapsed_minutes = (time.time() - start_time) / 60.0 - - if elapsed_minutes >= self.opts.max_time_minutes or not metric_values: - break - - os.chdir(cwd) - - # Need to get the average value if there were multiple values. - if metric_values: - truncated_mean = CalculateTruncatedMean(metric_values, - self.opts.truncate_percent) - standard_err = CalculateStandardError(metric_values) - standard_dev = CalculateStandardDeviation(metric_values) - - values = { - 'mean': truncated_mean, - 'std_err': standard_err, - 'std_dev': standard_dev, - 'values': metric_values, - } - - print 'Results of performance test: %12f %12f' % ( - truncated_mean, standard_err) - print - return (values, 0, output_of_all_runs) - else: - return ('Invalid metric specified, or no values returned from ' - 'performance test.', -1, output_of_all_runs) - - def FindAllRevisionsToSync(self, revision, depot): - """Finds all dependant revisions and depots that need to be synced for a - given revision. This is only useful in the git workflow, as an svn depot - may be split into multiple mirrors. - - ie. skia is broken up into 3 git mirrors over skia/src, skia/gyp, and - skia/include. To sync skia/src properly, one has to find the proper - revisions in skia/gyp and skia/include. - - Args: - revision: The revision to sync to. - depot: The depot in use at the moment (probably skia). - - Returns: - A list of [depot, revision] pairs that need to be synced. - """ - revisions_to_sync = [[depot, revision]] - - is_base = ((depot == 'chromium') or (depot == 'cros') or - (depot == 'android-chrome')) - - # Some SVN depots were split into multiple git depots, so we need to - # figure out for each mirror which git revision to grab. There's no - # guarantee that the SVN revision will exist for each of the dependant - # depots, so we have to grep the git logs and grab the next earlier one. - if not is_base and\ - DEPOT_DEPS_NAME[depot]['depends'] and\ - self.source_control.IsGit(): - svn_rev = self.source_control.SVNFindRev(revision) - - for d in DEPOT_DEPS_NAME[depot]['depends']: - self.ChangeToDepotWorkingDirectory(d) - - dependant_rev = self.source_control.ResolveToRevision(svn_rev, d, -1000) - - if dependant_rev: - revisions_to_sync.append([d, dependant_rev]) - - num_resolved = len(revisions_to_sync) - num_needed = len(DEPOT_DEPS_NAME[depot]['depends']) - - self.ChangeToDepotWorkingDirectory(depot) - - if not ((num_resolved - 1) == num_needed): - return None - - return revisions_to_sync - - def PerformPreBuildCleanup(self): - """Performs necessary cleanup between runs.""" - print 'Cleaning up between runs.' - print - - # Having these pyc files around between runs can confuse the - # perf tests and cause them to crash. - for (path, dir, files) in os.walk(self.src_cwd): - for cur_file in files: - if cur_file.endswith('.pyc'): - path_to_file = os.path.join(path, cur_file) - os.remove(path_to_file) - - def PerformWebkitDirectoryCleanup(self, revision): - """If the script is switching between Blink and WebKit during bisect, - its faster to just delete the directory rather than leave it up to git - to sync. - - Returns: - True if successful. - """ - if not self.source_control.CheckoutFileAtRevision( - bisect_utils.FILE_DEPS_GIT, revision, cwd=self.src_cwd): - return False - - cwd = os.getcwd() - os.chdir(self.src_cwd) - - is_blink = bisect_utils.IsDepsFileBlink() - - os.chdir(cwd) - - if not self.source_control.RevertFileToHead( - bisect_utils.FILE_DEPS_GIT): - return False - - if self.was_blink != is_blink: - self.was_blink = is_blink - return bisect_utils.RemoveThirdPartyWebkitDirectory() - return True - - def PerformCrosChrootCleanup(self): - """Deletes the chroot. - - Returns: - True if successful. - """ - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory('cros') - cmd = [CROS_SDK_PATH, '--delete'] - return_code = RunProcess(cmd) - os.chdir(cwd) - return not return_code - - def CreateCrosChroot(self): - """Creates a new chroot. - - Returns: - True if successful. - """ - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory('cros') - cmd = [CROS_SDK_PATH, '--create'] - return_code = RunProcess(cmd) - os.chdir(cwd) - return not return_code - - def PerformPreSyncCleanup(self, revision, depot): - """Performs any necessary cleanup before syncing. - - Returns: - True if successful. - """ - if depot == 'chromium': - if not bisect_utils.RemoveThirdPartyLibjingleDirectory(): - return False - return self.PerformWebkitDirectoryCleanup(revision) - elif depot == 'cros': - return self.PerformCrosChrootCleanup() - return True - - def RunPostSync(self, depot): - """Performs any work after syncing. - - Returns: - True if successful. - """ - if self.opts.target_platform == 'android': - if not bisect_utils.SetupAndroidBuildEnvironment(self.opts, - path_to_src=self.src_cwd): - return False - - if depot == 'cros': - return self.CreateCrosChroot() - else: - return self.RunGClientHooks() - return True - - def ShouldSkipRevision(self, depot, revision): - """Some commits can be safely skipped (such as a DEPS roll), since the tool - is git based those changes would have no effect. - - Args: - depot: The depot being bisected. - revision: Current revision we're synced to. - - Returns: - True if we should skip building/testing this revision. - """ - if depot == 'chromium': - if self.source_control.IsGit(): - cmd = ['diff-tree', '--no-commit-id', '--name-only', '-r', revision] - output = CheckRunGit(cmd) - - files = output.splitlines() - - if len(files) == 1 and files[0] == 'DEPS': - return True - - return False - - def SyncBuildAndRunRevision(self, revision, depot, command_to_run, metric, - skippable=False): - """Performs a full sync/build/run of the specified revision. - - Args: - revision: The revision to sync to. - depot: The depot that's being used at the moment (src, webkit, etc.) - command_to_run: The command to execute the performance test. - metric: The performance metric being tested. - - Returns: - On success, a tuple containing the results of the performance test. - Otherwise, a tuple with the error message. - """ - sync_client = None - if depot == 'chromium' or depot == 'android-chrome': - sync_client = 'gclient' - elif depot == 'cros': - sync_client = 'repo' - - revisions_to_sync = self.FindAllRevisionsToSync(revision, depot) - - if not revisions_to_sync: - return ('Failed to resolve dependant depots.', BUILD_RESULT_FAIL) - - if not self.PerformPreSyncCleanup(revision, depot): - return ('Failed to perform pre-sync cleanup.', BUILD_RESULT_FAIL) - - success = True - - if not self.opts.debug_ignore_sync: - for r in revisions_to_sync: - self.ChangeToDepotWorkingDirectory(r[0]) - - if sync_client: - self.PerformPreBuildCleanup() - - # If you're using gclient to sync, you need to specify the depot you - # want so that all the dependencies sync properly as well. - # ie. gclient sync src@ - current_revision = r[1] - if sync_client == 'gclient': - current_revision = '%s@%s' % (DEPOT_DEPS_NAME[depot]['src'], - current_revision) - if not self.source_control.SyncToRevision(current_revision, - sync_client): - success = False - - break - - if success: - success = self.RunPostSync(depot) - - if success: - if skippable and self.ShouldSkipRevision(depot, revision): - return ('Skipped revision: [%s]' % str(revision), - BUILD_RESULT_SKIPPED) - - start_build_time = time.time() - if self.BuildCurrentRevision(depot): - after_build_time = time.time() - results = self.RunPerformanceTestAndParseResults(command_to_run, - metric) - - if results[1] == 0: - external_revisions = self.Get3rdPartyRevisionsFromCurrentRevision( - depot, revision) - - if not external_revisions is None: - return (results[0], results[1], external_revisions, - time.time() - after_build_time, time.time() - - start_build_time) - else: - return ('Failed to parse DEPS file for external revisions.', - BUILD_RESULT_FAIL) - else: - return results - else: - return ('Failed to build revision: [%s]' % (str(revision, )), - BUILD_RESULT_FAIL) - else: - return ('Failed to run [gclient runhooks].', BUILD_RESULT_FAIL) - else: - return ('Failed to sync revision: [%s]' % (str(revision, )), - BUILD_RESULT_FAIL) - - def CheckIfRunPassed(self, current_value, known_good_value, known_bad_value): - """Given known good and bad values, decide if the current_value passed - or failed. - - Args: - current_value: The value of the metric being checked. - known_bad_value: The reference value for a "failed" run. - known_good_value: The reference value for a "passed" run. - - Returns: - True if the current_value is closer to the known_good_value than the - known_bad_value. - """ - dist_to_good_value = abs(current_value['mean'] - known_good_value['mean']) - dist_to_bad_value = abs(current_value['mean'] - known_bad_value['mean']) - - return dist_to_good_value < dist_to_bad_value - - def _GetDepotDirectory(self, depot_name): - if depot_name == 'chromium': - return self.src_cwd - elif depot_name == 'cros': - return self.cros_cwd - elif depot_name in DEPOT_NAMES: - return self.depot_cwd[depot_name] - else: - assert False, 'Unknown depot [ %s ] encountered. Possibly a new one'\ - ' was added without proper support?' %\ - (depot_name,) - - def ChangeToDepotWorkingDirectory(self, depot_name): - """Given a depot, changes to the appropriate working directory. - - Args: - depot_name: The name of the depot (see DEPOT_NAMES). - """ - os.chdir(self._GetDepotDirectory(depot_name)) - - def _FillInV8BleedingEdgeInfo(self, min_revision_data, max_revision_data): - r1 = self._GetNearestV8BleedingEdgeFromTrunk(min_revision_data['revision'], - search_forward=True) - r2 = self._GetNearestV8BleedingEdgeFromTrunk(max_revision_data['revision'], - search_forward=False) - min_revision_data['external']['v8_bleeding_edge'] = r1 - max_revision_data['external']['v8_bleeding_edge'] = r2 - - if (not self._GetV8BleedingEdgeFromV8TrunkIfMappable( - min_revision_data['revision']) or - not self._GetV8BleedingEdgeFromV8TrunkIfMappable( - max_revision_data['revision'])): - self.warnings.append('Trunk revisions in V8 did not map directly to ' - 'bleeding_edge. Attempted to expand the range to find V8 rolls which ' - 'did map directly to bleeding_edge revisions, but results might not ' - 'be valid.') - - def _FindNextDepotToBisect(self, current_depot, current_revision, - min_revision_data, max_revision_data): - """Given the state of the bisect, decides which depot the script should - dive into next (if any). - - Args: - current_depot: Current depot being bisected. - current_revision: Current revision synced to. - min_revision_data: Data about the earliest revision in the bisect range. - max_revision_data: Data about the latest revision in the bisect range. - - Returns: - The depot to bisect next, or None. - """ - external_depot = None - for next_depot in DEPOT_NAMES: - if DEPOT_DEPS_NAME[next_depot].has_key('platform'): - if DEPOT_DEPS_NAME[next_depot]['platform'] != os.name: - continue - - if not (DEPOT_DEPS_NAME[next_depot]["recurse"] and - min_revision_data['depot'] in DEPOT_DEPS_NAME[next_depot]['from']): - continue - - if current_depot == 'v8': - # We grab the bleeding_edge info here rather than earlier because we - # finally have the revision range. From that we can search forwards and - # backwards to try to match trunk revisions to bleeding_edge. - self._FillInV8BleedingEdgeInfo(min_revision_data, max_revision_data) - - if (min_revision_data['external'][next_depot] == - max_revision_data['external'][next_depot]): - continue - - if (min_revision_data['external'][next_depot] and - max_revision_data['external'][next_depot]): - external_depot = next_depot - break - - return external_depot - - def PrepareToBisectOnDepot(self, - current_depot, - end_revision, - start_revision, - previous_depot, - previous_revision): - """Changes to the appropriate directory and gathers a list of revisions - to bisect between |start_revision| and |end_revision|. - - Args: - current_depot: The depot we want to bisect. - end_revision: End of the revision range. - start_revision: Start of the revision range. - previous_depot: The depot we were previously bisecting. - previous_revision: The last revision we synced to on |previous_depot|. - - Returns: - A list containing the revisions between |start_revision| and - |end_revision| inclusive. - """ - # Change into working directory of external library to run - # subsequent commands. - self.ChangeToDepotWorkingDirectory(current_depot) - - # V8 (and possibly others) is merged in periodically. Bisecting - # this directory directly won't give much good info. - if DEPOT_DEPS_NAME[current_depot].has_key('custom_deps'): - config_path = os.path.join(self.src_cwd, '..') - if bisect_utils.RunGClientAndCreateConfig(self.opts, - DEPOT_DEPS_NAME[current_depot]['custom_deps'], cwd=config_path): - return [] - if bisect_utils.RunGClient( - ['sync', '--revision', previous_revision], cwd=self.src_cwd): - return [] - - if current_depot == 'v8_bleeding_edge': - self.ChangeToDepotWorkingDirectory('chromium') - - shutil.move('v8', 'v8.bak') - shutil.move('v8_bleeding_edge', 'v8') - - self.cleanup_commands.append(['mv', 'v8', 'v8_bleeding_edge']) - self.cleanup_commands.append(['mv', 'v8.bak', 'v8']) - - self.depot_cwd['v8_bleeding_edge'] = os.path.join(self.src_cwd, 'v8') - self.depot_cwd['v8'] = os.path.join(self.src_cwd, 'v8.bak') - - self.ChangeToDepotWorkingDirectory(current_depot) - - depot_revision_list = self.GetRevisionList(current_depot, - end_revision, - start_revision) - - self.ChangeToDepotWorkingDirectory('chromium') - - return depot_revision_list - - def GatherReferenceValues(self, good_rev, bad_rev, cmd, metric, target_depot): - """Gathers reference values by running the performance tests on the - known good and bad revisions. - - Args: - good_rev: The last known good revision where the performance regression - has not occurred yet. - bad_rev: A revision where the performance regression has already occurred. - cmd: The command to execute the performance test. - metric: The metric being tested for regression. - - Returns: - A tuple with the results of building and running each revision. - """ - bad_run_results = self.SyncBuildAndRunRevision(bad_rev, - target_depot, - cmd, - metric) - - good_run_results = None - - if not bad_run_results[1]: - good_run_results = self.SyncBuildAndRunRevision(good_rev, - target_depot, - cmd, - metric) - - return (bad_run_results, good_run_results) - - def AddRevisionsIntoRevisionData(self, revisions, depot, sort, revision_data): - """Adds new revisions to the revision_data dict and initializes them. - - Args: - revisions: List of revisions to add. - depot: Depot that's currently in use (src, webkit, etc...) - sort: Sorting key for displaying revisions. - revision_data: A dict to add the new revisions into. Existing revisions - will have their sort keys offset. - """ - - num_depot_revisions = len(revisions) - - for k, v in revision_data.iteritems(): - if v['sort'] > sort: - v['sort'] += num_depot_revisions - - for i in xrange(num_depot_revisions): - r = revisions[i] - - revision_data[r] = {'revision' : r, - 'depot' : depot, - 'value' : None, - 'perf_time' : 0, - 'build_time' : 0, - 'passed' : '?', - 'sort' : i + sort + 1} - - def PrintRevisionsToBisectMessage(self, revision_list, depot): - if self.opts.output_buildbot_annotations: - step_name = 'Bisection Range: [%s - %s]' % ( - revision_list[len(revision_list)-1], revision_list[0]) - bisect_utils.OutputAnnotationStepStart(step_name) - - print - print 'Revisions to bisect on [%s]:' % depot - for revision_id in revision_list: - print ' -> %s' % (revision_id, ) - print - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - - def NudgeRevisionsIfDEPSChange(self, bad_revision, good_revision): - """Checks to see if changes to DEPS file occurred, and that the revision - range also includes the change to .DEPS.git. If it doesn't, attempts to - expand the revision range to include it. - - Args: - bad_rev: First known bad revision. - good_revision: Last known good revision. - - Returns: - A tuple with the new bad and good revisions. - """ - if self.source_control.IsGit() and self.opts.target_platform == 'chromium': - changes_to_deps = self.source_control.QueryFileRevisionHistory( - 'DEPS', good_revision, bad_revision) - - if changes_to_deps: - # DEPS file was changed, search from the oldest change to DEPS file to - # bad_revision to see if there are matching .DEPS.git changes. - oldest_deps_change = changes_to_deps[-1] - changes_to_gitdeps = self.source_control.QueryFileRevisionHistory( - bisect_utils.FILE_DEPS_GIT, oldest_deps_change, bad_revision) - - if len(changes_to_deps) != len(changes_to_gitdeps): - # Grab the timestamp of the last DEPS change - cmd = ['log', '--format=%ct', '-1', changes_to_deps[0]] - output = CheckRunGit(cmd) - commit_time = int(output) - - # Try looking for a commit that touches the .DEPS.git file in the - # next 15 minutes after the DEPS file change. - cmd = ['log', '--format=%H', '-1', - '--before=%d' % (commit_time + 900), '--after=%d' % commit_time, - 'origin/master', bisect_utils.FILE_DEPS_GIT] - output = CheckRunGit(cmd) - output = output.strip() - if output: - self.warnings.append('Detected change to DEPS and modified ' - 'revision range to include change to .DEPS.git') - return (output, good_revision) - else: - self.warnings.append('Detected change to DEPS but couldn\'t find ' - 'matching change to .DEPS.git') - return (bad_revision, good_revision) - - def CheckIfRevisionsInProperOrder(self, - target_depot, - good_revision, - bad_revision): - """Checks that |good_revision| is an earlier revision than |bad_revision|. - - Args: - good_revision: Number/tag of the known good revision. - bad_revision: Number/tag of the known bad revision. - - Returns: - True if the revisions are in the proper order (good earlier than bad). - """ - if self.source_control.IsGit() and target_depot != 'cros': - cmd = ['log', '--format=%ct', '-1', good_revision] - cwd = self._GetDepotDirectory(target_depot) - - output = CheckRunGit(cmd, cwd=cwd) - good_commit_time = int(output) - - cmd = ['log', '--format=%ct', '-1', bad_revision] - output = CheckRunGit(cmd, cwd=cwd) - bad_commit_time = int(output) - - return good_commit_time <= bad_commit_time - else: - # Cros/svn use integers - return int(good_revision) <= int(bad_revision) - - def Run(self, command_to_run, bad_revision_in, good_revision_in, metric): - """Given known good and bad revisions, run a binary search on all - intermediate revisions to determine the CL where the performance regression - occurred. - - Args: - command_to_run: Specify the command to execute the performance test. - good_revision: Number/tag of the known good revision. - bad_revision: Number/tag of the known bad revision. - metric: The performance metric to monitor. - - Returns: - A dict with 2 members, 'revision_data' and 'error'. On success, - 'revision_data' will contain a dict mapping revision ids to - data about that revision. Each piece of revision data consists of a - dict with the following keys: - - 'passed': Represents whether the performance test was successful at - that revision. Possible values include: 1 (passed), 0 (failed), - '?' (skipped), 'F' (build failed). - 'depot': The depot that this revision is from (ie. WebKit) - 'external': If the revision is a 'src' revision, 'external' contains - the revisions of each of the external libraries. - 'sort': A sort value for sorting the dict in order of commits. - - For example: - { - 'error':None, - 'revision_data': - { - 'CL #1': - { - 'passed':False, - 'depot':'chromium', - 'external':None, - 'sort':0 - } - } - } - - If an error occurred, the 'error' field will contain the message and - 'revision_data' will be empty. - """ - - results = {'revision_data' : {}, - 'error' : None} - - # Choose depot to bisect first - target_depot = 'chromium' - if self.opts.target_platform == 'cros': - target_depot = 'cros' - elif self.opts.target_platform == 'android-chrome': - target_depot = 'android-chrome' - - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory(target_depot) - - # If they passed SVN CL's, etc... we can try match them to git SHA1's. - bad_revision = self.source_control.ResolveToRevision(bad_revision_in, - target_depot, 100) - good_revision = self.source_control.ResolveToRevision(good_revision_in, - target_depot, -100) - - os.chdir(cwd) - - - if bad_revision is None: - results['error'] = 'Could\'t resolve [%s] to SHA1.' % (bad_revision_in,) - return results - - if good_revision is None: - results['error'] = 'Could\'t resolve [%s] to SHA1.' % (good_revision_in,) - return results - - # Check that they didn't accidentally swap good and bad revisions. - if not self.CheckIfRevisionsInProperOrder( - target_depot, good_revision, bad_revision): - results['error'] = 'bad_revision < good_revision, did you swap these '\ - 'by mistake?' - return results - - (bad_revision, good_revision) = self.NudgeRevisionsIfDEPSChange( - bad_revision, good_revision) - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepStart('Gathering Revisions') - - print 'Gathering revision range for bisection.' - - # Retrieve a list of revisions to do bisection on. - src_revision_list = self.GetRevisionList(target_depot, - bad_revision, - good_revision) - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - - if src_revision_list: - # revision_data will store information about a revision such as the - # depot it came from, the webkit/V8 revision at that time, - # performance timing, build state, etc... - revision_data = results['revision_data'] - - # revision_list is the list we're binary searching through at the moment. - revision_list = [] - - sort_key_ids = 0 - - for current_revision_id in src_revision_list: - sort_key_ids += 1 - - revision_data[current_revision_id] = {'value' : None, - 'passed' : '?', - 'depot' : target_depot, - 'external' : None, - 'perf_time' : 0, - 'build_time' : 0, - 'sort' : sort_key_ids} - revision_list.append(current_revision_id) - - min_revision = 0 - max_revision = len(revision_list) - 1 - - self.PrintRevisionsToBisectMessage(revision_list, target_depot) - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepStart('Gathering Reference Values') - - print 'Gathering reference values for bisection.' - - # Perform the performance tests on the good and bad revisions, to get - # reference values. - (bad_results, good_results) = self.GatherReferenceValues(good_revision, - bad_revision, - command_to_run, - metric, - target_depot) - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - - if bad_results[1]: - results['error'] = ('An error occurred while building and running ' - 'the \'bad\' reference value. The bisect cannot continue without ' - 'a working \'bad\' revision to start from.\n\nError: %s' % - bad_results[0]) - return results - - if good_results[1]: - results['error'] = ('An error occurred while building and running ' - 'the \'good\' reference value. The bisect cannot continue without ' - 'a working \'good\' revision to start from.\n\nError: %s' % - good_results[0]) - return results - - - # We need these reference values to determine if later runs should be - # classified as pass or fail. - known_bad_value = bad_results[0] - known_good_value = good_results[0] - - # Can just mark the good and bad revisions explicitly here since we - # already know the results. - bad_revision_data = revision_data[revision_list[0]] - bad_revision_data['external'] = bad_results[2] - bad_revision_data['perf_time'] = bad_results[3] - bad_revision_data['build_time'] = bad_results[4] - bad_revision_data['passed'] = False - bad_revision_data['value'] = known_bad_value - - good_revision_data = revision_data[revision_list[max_revision]] - good_revision_data['external'] = good_results[2] - good_revision_data['perf_time'] = good_results[3] - good_revision_data['build_time'] = good_results[4] - good_revision_data['passed'] = True - good_revision_data['value'] = known_good_value - - next_revision_depot = target_depot - - while True: - if not revision_list: - break - - min_revision_data = revision_data[revision_list[min_revision]] - max_revision_data = revision_data[revision_list[max_revision]] - - if max_revision - min_revision <= 1: - current_depot = min_revision_data['depot'] - if min_revision_data['passed'] == '?': - next_revision_index = min_revision - elif max_revision_data['passed'] == '?': - next_revision_index = max_revision - elif current_depot in ['android-chrome', 'cros', 'chromium', 'v8']: - previous_revision = revision_list[min_revision] - # If there were changes to any of the external libraries we track, - # should bisect the changes there as well. - external_depot = self._FindNextDepotToBisect(current_depot, - previous_revision, min_revision_data, max_revision_data) - - # If there was no change in any of the external depots, the search - # is over. - if not external_depot: - if current_depot == 'v8': - self.warnings.append('Unfortunately, V8 bisection couldn\'t ' - 'continue any further. The script can only bisect into ' - 'V8\'s bleeding_edge repository if both the current and ' - 'previous revisions in trunk map directly to revisions in ' - 'bleeding_edge.') - break - - earliest_revision = max_revision_data['external'][external_depot] - latest_revision = min_revision_data['external'][external_depot] - - new_revision_list = self.PrepareToBisectOnDepot(external_depot, - latest_revision, - earliest_revision, - next_revision_depot, - previous_revision) - - if not new_revision_list: - results['error'] = 'An error occurred attempting to retrieve'\ - ' revision range: [%s..%s]' %\ - (earliest_revision, latest_revision) - return results - - self.AddRevisionsIntoRevisionData(new_revision_list, - external_depot, - min_revision_data['sort'], - revision_data) - - # Reset the bisection and perform it on the newly inserted - # changelists. - revision_list = new_revision_list - min_revision = 0 - max_revision = len(revision_list) - 1 - sort_key_ids += len(revision_list) - - print 'Regression in metric:%s appears to be the result of changes'\ - ' in [%s].' % (metric, external_depot) - - self.PrintRevisionsToBisectMessage(revision_list, external_depot) - - continue - else: - break - else: - next_revision_index = int((max_revision - min_revision) / 2) +\ - min_revision - - next_revision_id = revision_list[next_revision_index] - next_revision_data = revision_data[next_revision_id] - next_revision_depot = next_revision_data['depot'] - - self.ChangeToDepotWorkingDirectory(next_revision_depot) - - if self.opts.output_buildbot_annotations: - step_name = 'Working on [%s]' % next_revision_id - bisect_utils.OutputAnnotationStepStart(step_name) - - print 'Working on revision: [%s]' % next_revision_id - - run_results = self.SyncBuildAndRunRevision(next_revision_id, - next_revision_depot, - command_to_run, - metric, skippable=True) - - # If the build is successful, check whether or not the metric - # had regressed. - if not run_results[1]: - if len(run_results) > 2: - next_revision_data['external'] = run_results[2] - next_revision_data['perf_time'] = run_results[3] - next_revision_data['build_time'] = run_results[4] - - passed_regression = self.CheckIfRunPassed(run_results[0], - known_good_value, - known_bad_value) - - next_revision_data['passed'] = passed_regression - next_revision_data['value'] = run_results[0] - - if passed_regression: - max_revision = next_revision_index - else: - min_revision = next_revision_index - else: - if run_results[1] == BUILD_RESULT_SKIPPED: - next_revision_data['passed'] = 'Skipped' - elif run_results[1] == BUILD_RESULT_FAIL: - next_revision_data['passed'] = 'Build Failed' - - print run_results[0] - - # If the build is broken, remove it and redo search. - revision_list.pop(next_revision_index) - - max_revision -= 1 - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - else: - # Weren't able to sync and retrieve the revision range. - results['error'] = 'An error occurred attempting to retrieve revision '\ - 'range: [%s..%s]' % (good_revision, bad_revision) - - return results - - def _PrintBanner(self, results_dict): - print - print " __o_\___ Aw Snap! We hit a speed bump!" - print "=-O----O-'__.~.___________________________________" - print - print 'Bisect reproduced a %.02f%% (+-%.02f%%) change in the %s metric.' % ( - results_dict['regression_size'], results_dict['regression_std_err'], - '/'.join(self.opts.metric)) - # The perf dashboard specifically looks for the string - # "Confidence in Bisection Results: 100%" to decide whether or not - # to cc the author(s). If you change this, please update the perf - # dashboard as well. - print 'Confidence in Bisection Results: %d%%' % results_dict['confidence'] - - def _PrintRevisionInfo(self, cl, info, depot=None): - # The perf dashboard specifically looks for the string - # "Author : " to parse out who to cc on a bug. If you change the - # formatting here, please update the perf dashboard as well. - print - print 'Subject : %s' % info['subject'] - print 'Author : %s' % info['author'] - if not info['email'].startswith(info['author']): - print 'Email : %s' % info['email'] - if depot and DEPOT_DEPS_NAME[depot].has_key('viewvc'): - try: - # Format is "git-svn-id: svn://....@123456 " - svn_line = [i for i in info['body'].splitlines() if 'git-svn-id:' in i] - svn_revision = svn_line[0].split('@') - svn_revision = svn_revision[1].split(' ')[0] - print 'Link : %s' % DEPOT_DEPS_NAME[depot]['viewvc'] + svn_revision - except IndexError: - print - print 'Failed to parse svn revision from body:' - print - print info['body'] - print - print 'Commit : %s' % cl - print 'Date : %s' % info['date'] - - def _PrintTestedCommitsTable(self, revision_data_sorted, - first_working_revision, last_broken_revision): - print - print 'Tested commits:' - print ' %20s %40s %12s %14s %13s' % ('Depot'.center(20, ' '), - 'Commit SHA'.center(40, ' '), 'Mean'.center(12, ' '), - 'Std. Error'.center(14, ' '), 'State'.center(13, ' ')) - state = 0 - for current_id, current_data in revision_data_sorted: - if current_data['value']: - if (current_id == last_broken_revision or - current_id == first_working_revision): - print - state += 1 - - state_str = 'Bad' - if state == 1: - state_str = 'Suspected CL' - elif state == 2: - state_str = 'Good' - state_str = state_str.center(13, ' ') - - std_error = ('+-%.02f' % - current_data['value']['std_err']).center(14, ' ') - mean = ('%.02f' % current_data['value']['mean']).center(12, ' ') - print ' %20s %40s %12s %14s %13s' % ( - current_data['depot'].center(20, ' '), current_id, mean, - std_error, state_str) - - def _PrintReproSteps(self): - print - print 'To reproduce locally:' - print '$ ' + self.opts.command - if bisect_utils.IsTelemetryCommand(self.opts.command): - print - print 'Also consider passing --profiler=list to see available profilers.' - - def _PrintOtherRegressions(self, other_regressions, revision_data): - print - print 'Other regressions may have occurred:' - for regression in other_regressions: - current_id, previous_id, percent_change, deviations = regression - current_data = revision_data[current_id] - previous_data = revision_data[previous_id] - - if deviations is None: - deviations = 'N/A' - else: - deviations = '%.2f' % deviations - - if percent_change is None: - percent_change = 0 - - print ' %8s %s [%.2f%%, %s x std.dev]' % ( - previous_data['depot'], previous_id, 100 * percent_change, deviations) - print ' %8s %s' % (current_data['depot'], current_id) - print - - def _PrintStepTime(self, revision_data_sorted): - step_perf_time_avg = 0.0 - step_build_time_avg = 0.0 - step_count = 0.0 - for _, current_data in revision_data_sorted: - step_perf_time_avg += current_data['perf_time'] - step_build_time_avg += current_data['build_time'] - step_count += 1 - if step_count: - step_perf_time_avg = step_perf_time_avg / step_count - step_build_time_avg = step_build_time_avg / step_count - print - print 'Average build time : %s' % datetime.timedelta( - seconds=int(step_build_time_avg)) - print 'Average test time : %s' % datetime.timedelta( - seconds=int(step_perf_time_avg)) - - def _PrintWarnings(self): - if not self.warnings: - return - print - print 'WARNINGS:' - for w in self.warnings: - print ' !!! %s' % w - - def _GetResultsDict(self, revision_data, revision_data_sorted): - # Find range where it possibly broke. - first_working_revision = None - first_working_revision_index = -1 - last_broken_revision = None - last_broken_revision_index = -1 - - for i in xrange(len(revision_data_sorted)): - k, v = revision_data_sorted[i] - if v['passed'] == 1: - if not first_working_revision: - first_working_revision = k - first_working_revision_index = i - - if not v['passed']: - last_broken_revision = k - last_broken_revision_index = i - - if last_broken_revision != None and first_working_revision != None: - bounds_broken = [revision_data[last_broken_revision]['value']['mean'], - revision_data[last_broken_revision]['value']['mean']] - broken_mean = [] - for i in xrange(0, last_broken_revision_index + 1): - if revision_data_sorted[i][1]['value']: - bounds_broken[0] = min(bounds_broken[0], - revision_data_sorted[i][1]['value']['mean']) - bounds_broken[1] = max(bounds_broken[1], - revision_data_sorted[i][1]['value']['mean']) - broken_mean.extend(revision_data_sorted[i][1]['value']['values']) - - bounds_working = [revision_data[first_working_revision]['value']['mean'], - revision_data[first_working_revision]['value']['mean']] - working_mean = [] - for i in xrange(first_working_revision_index, len(revision_data_sorted)): - if revision_data_sorted[i][1]['value']: - bounds_working[0] = min(bounds_working[0], - revision_data_sorted[i][1]['value']['mean']) - bounds_working[1] = max(bounds_working[1], - revision_data_sorted[i][1]['value']['mean']) - working_mean.extend(revision_data_sorted[i][1]['value']['values']) - - # Calculate the approximate size of the regression - mean_of_bad_runs = CalculateTruncatedMean(broken_mean, 0.0) - mean_of_good_runs = CalculateTruncatedMean(working_mean, 0.0) - - regression_size = math.fabs(max(mean_of_good_runs, mean_of_bad_runs) / - max(0.0001, min(mean_of_good_runs, mean_of_bad_runs))) * 100.0 - 100.0 - - regression_std_err = math.fabs(CalculatePooledStandardError( - [working_mean, broken_mean]) / - max(0.0001, min(mean_of_good_runs, mean_of_bad_runs))) * 100.0 - - # Give a "confidence" in the bisect. At the moment we use how distinct the - # values are before and after the last broken revision, and how noisy the - # overall graph is. - dist_between_groups = min(math.fabs(bounds_broken[1] - bounds_working[0]), - math.fabs(bounds_broken[0] - bounds_working[1])) - len_working_group = CalculateStandardDeviation(working_mean) - len_broken_group = CalculateStandardDeviation(broken_mean) - - confidence = (dist_between_groups / ( - max(0.0001, (len_broken_group + len_working_group )))) - confidence = int(min(1.0, max(confidence, 0.0)) * 100.0) - - culprit_revisions = [] - - cwd = os.getcwd() - self.ChangeToDepotWorkingDirectory( - revision_data[last_broken_revision]['depot']) - - if revision_data[last_broken_revision]['depot'] == 'cros': - # Want to get a list of all the commits and what depots they belong - # to so that we can grab info about each. - cmd = ['repo', 'forall', '-c', - 'pwd ; git log --pretty=oneline --before=%d --after=%d' % ( - last_broken_revision, first_working_revision + 1)] - (output, return_code) = RunProcessAndRetrieveOutput(cmd) - - changes = [] - assert not return_code, 'An error occurred while running'\ - ' "%s"' % ' '.join(cmd) - last_depot = None - cwd = os.getcwd() - for l in output.split('\n'): - if l: - # Output will be in form: - # /path_to_depot - # /path_to_other_depot - # - # /path_again - # - # etc. - if l[0] == '/': - last_depot = l - else: - contents = l.split(' ') - if len(contents) > 1: - changes.append([last_depot, contents[0]]) - for c in changes: - os.chdir(c[0]) - info = self.source_control.QueryRevisionInfo(c[1]) - culprit_revisions.append((c[1], info, None)) - else: - for i in xrange(last_broken_revision_index, len(revision_data_sorted)): - k, v = revision_data_sorted[i] - if k == first_working_revision: - break - self.ChangeToDepotWorkingDirectory(v['depot']) - info = self.source_control.QueryRevisionInfo(k) - culprit_revisions.append((k, info, v['depot'])) - os.chdir(cwd) - - # Check for any other possible regression ranges - good_std_dev = revision_data[first_working_revision]['value']['std_err'] - good_mean = revision_data[first_working_revision]['value']['mean'] - bad_mean = revision_data[last_broken_revision]['value']['mean'] - prev_revision_data = revision_data_sorted[0][1] - prev_revision_id = revision_data_sorted[0][0] - other_regressions = [] - for current_id, current_data in revision_data_sorted: - if current_data['value']: - prev_mean = prev_revision_data['value']['mean'] - cur_mean = current_data['value']['mean'] - - if good_std_dev: - deviations = math.fabs(prev_mean - cur_mean) / good_std_dev - else: - deviations = None - - if good_mean: - percent_change = (prev_mean - cur_mean) / good_mean - - # If the "good" valuse are supposed to be higher than the "bad" - # values (ie. scores), flip the sign of the percent change so that - # a positive value always represents a regression. - if bad_mean < good_mean: - percent_change *= -1.0 - else: - percent_change = None - - if deviations >= 1.5 or percent_change > 0.01: - if current_id != first_working_revision: - other_regressions.append( - [current_id, prev_revision_id, percent_change, deviations]) - prev_revision_data = current_data - prev_revision_id = current_id - - # Check for warnings: - if len(culprit_revisions) > 1: - self.warnings.append('Due to build errors, regression range could ' - 'not be narrowed down to a single commit.') - if self.opts.repeat_test_count == 1: - self.warnings.append('Tests were only set to run once. This may ' - 'be insufficient to get meaningful results.') - if confidence < 100: - self.warnings.append( - 'Confidence is less than 100%. There could be other candidates for ' - 'this regression. Try bisecting again with increased repeat_count or ' - 'on a sub-metric that shows the regression more clearly.') - - return { - 'first_working_revision': first_working_revision, - 'last_broken_revision': last_broken_revision, - 'culprit_revisions': culprit_revisions, - 'other_regressions': other_regressions, - 'regression_size': regression_size, - 'regression_std_err': regression_std_err, - 'confidence': confidence, - } - - def FormatAndPrintResults(self, bisect_results): - """Prints the results from a bisection run in a readable format. - - Args - bisect_results: The results from a bisection test run. - """ - revision_data = bisect_results['revision_data'] - revision_data_sorted = sorted(revision_data.iteritems(), - key = lambda x: x[1]['sort']) - results_dict = self._GetResultsDict(revision_data, revision_data_sorted) - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepStart('Build Status Per Revision') - - print - print 'Full results of bisection:' - for current_id, current_data in revision_data_sorted: - build_status = current_data['passed'] - - if type(build_status) is bool: - if build_status: - build_status = 'Good' - else: - build_status = 'Bad' - - print ' %20s %40s %s' % (current_data['depot'], - current_id, build_status) - print - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - # The perf dashboard scrapes the "results" step in order to comment on - # bugs. If you change this, please update the perf dashboard as well. - bisect_utils.OutputAnnotationStepStart('Results') - - if results_dict['culprit_revisions']: - self._PrintBanner(results_dict) - for culprit in results_dict['culprit_revisions']: - cl, info, depot = culprit - self._PrintRevisionInfo(cl, info, depot) - self._PrintReproSteps() - if results_dict['other_regressions']: - self._PrintOtherRegressions(results_dict['other_regressions'], - revision_data) - - self._PrintTestedCommitsTable(revision_data_sorted, - results_dict['first_working_revision'], - results_dict['last_broken_revision']) - self._PrintStepTime(revision_data_sorted) - self._PrintWarnings() - - if self.opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - - -def DetermineAndCreateSourceControl(opts): - """Attempts to determine the underlying source control workflow and returns - a SourceControl object. - - Returns: - An instance of a SourceControl object, or None if the current workflow - is unsupported. - """ - - (output, return_code) = RunGit(['rev-parse', '--is-inside-work-tree']) - - if output.strip() == 'true': - return GitSourceControl(opts) - - return None - - -def IsPlatformSupported(opts): - """Checks that this platform and build system are supported. - - Args: - opts: The options parsed from the command line. - - Returns: - True if the platform and build system are supported. - """ - # Haven't tested the script out on any other platforms yet. - supported = ['posix', 'nt'] - return os.name in supported - - -def RmTreeAndMkDir(path_to_dir): - """Removes the directory tree specified, and then creates an empty - directory in the same location. - - Args: - path_to_dir: Path to the directory tree. - - Returns: - True if successful, False if an error occurred. - """ - try: - if os.path.exists(path_to_dir): - shutil.rmtree(path_to_dir) - except OSError, e: - if e.errno != errno.ENOENT: - return False - - try: - os.makedirs(path_to_dir) - except OSError, e: - if e.errno != errno.EEXIST: - return False - - return True - - -def RemoveBuildFiles(): - """Removes build files from previous runs.""" - if RmTreeAndMkDir(os.path.join('out', 'Release')): - if RmTreeAndMkDir(os.path.join('build', 'Release')): - return True - return False - - -class BisectOptions(object): - """Options to be used when running bisection.""" - def __init__(self): - super(BisectOptions, self).__init__() - - self.target_platform = 'chromium' - self.build_preference = None - self.good_revision = None - self.bad_revision = None - self.use_goma = None - self.cros_board = None - self.cros_remote_ip = None - self.repeat_test_count = 20 - self.truncate_percent = 25 - self.max_time_minutes = 20 - self.metric = None - self.command = None - self.output_buildbot_annotations = None - self.no_custom_deps = False - self.working_directory = None - self.extra_src = None - self.debug_ignore_build = None - self.debug_ignore_sync = None - self.debug_ignore_perf_test = None - - def _CreateCommandLineParser(self): - """Creates a parser with bisect options. - - Returns: - An instance of optparse.OptionParser. - """ - usage = ('%prog [options] [-- chromium-options]\n' - 'Perform binary search on revision history to find a minimal ' - 'range of revisions where a peformance metric regressed.\n') - - parser = optparse.OptionParser(usage=usage) - - group = optparse.OptionGroup(parser, 'Bisect options') - group.add_option('-c', '--command', - type='str', - help='A command to execute your performance test at' + - ' each point in the bisection.') - group.add_option('-b', '--bad_revision', - type='str', - help='A bad revision to start bisection. ' + - 'Must be later than good revision. May be either a git' + - ' or svn revision.') - group.add_option('-g', '--good_revision', - type='str', - help='A revision to start bisection where performance' + - ' test is known to pass. Must be earlier than the ' + - 'bad revision. May be either a git or svn revision.') - group.add_option('-m', '--metric', - type='str', - help='The desired metric to bisect on. For example ' + - '"vm_rss_final_b/vm_rss_f_b"') - group.add_option('-r', '--repeat_test_count', - type='int', - default=20, - help='The number of times to repeat the performance ' - 'test. Values will be clamped to range [1, 100]. ' - 'Default value is 20.') - group.add_option('--max_time_minutes', - type='int', - default=20, - help='The maximum time (in minutes) to take running the ' - 'performance tests. The script will run the performance ' - 'tests according to --repeat_test_count, so long as it ' - 'doesn\'t exceed --max_time_minutes. Values will be ' - 'clamped to range [1, 60].' - 'Default value is 20.') - group.add_option('-t', '--truncate_percent', - type='int', - default=25, - help='The highest/lowest % are discarded to form a ' - 'truncated mean. Values will be clamped to range [0, ' - '25]. Default value is 25 (highest/lowest 25% will be ' - 'discarded).') - parser.add_option_group(group) - - group = optparse.OptionGroup(parser, 'Build options') - group.add_option('-w', '--working_directory', - type='str', - help='Path to the working directory where the script ' - 'will do an initial checkout of the chromium depot. The ' - 'files will be placed in a subdirectory "bisect" under ' - 'working_directory and that will be used to perform the ' - 'bisection. This parameter is optional, if it is not ' - 'supplied, the script will work from the current depot.') - group.add_option('--build_preference', - type='choice', - choices=['msvs', 'ninja', 'make'], - help='The preferred build system to use. On linux/mac ' - 'the options are make/ninja. On Windows, the options ' - 'are msvs/ninja.') - group.add_option('--target_platform', - type='choice', - choices=['chromium', 'cros', 'android', 'android-chrome'], - default='chromium', - help='The target platform. Choices are "chromium" ' - '(current platform), "cros", or "android". If you ' - 'specify something other than "chromium", you must be ' - 'properly set up to build that platform.') - group.add_option('--no_custom_deps', - dest='no_custom_deps', - action="store_true", - default=False, - help='Run the script with custom_deps or not.') - group.add_option('--extra_src', - type='str', - help='Path to a script which can be used to modify ' - 'the bisect script\'s behavior.') - group.add_option('--cros_board', - type='str', - help='The cros board type to build.') - group.add_option('--cros_remote_ip', - type='str', - help='The remote machine to image to.') - group.add_option('--use_goma', - action="store_true", - help='Add a bunch of extra threads for goma.') - group.add_option('--output_buildbot_annotations', - action="store_true", - help='Add extra annotation output for buildbot.') - parser.add_option_group(group) - - group = optparse.OptionGroup(parser, 'Debug options') - group.add_option('--debug_ignore_build', - action="store_true", - help='DEBUG: Don\'t perform builds.') - group.add_option('--debug_ignore_sync', - action="store_true", - help='DEBUG: Don\'t perform syncs.') - group.add_option('--debug_ignore_perf_test', - action="store_true", - help='DEBUG: Don\'t perform performance tests.') - parser.add_option_group(group) - - - return parser - - def ParseCommandLine(self): - """Parses the command line for bisect options.""" - parser = self._CreateCommandLineParser() - (opts, args) = parser.parse_args() - - try: - if not opts.command: - raise RuntimeError('missing required parameter: --command') - - if not opts.good_revision: - raise RuntimeError('missing required parameter: --good_revision') - - if not opts.bad_revision: - raise RuntimeError('missing required parameter: --bad_revision') - - if not opts.metric: - raise RuntimeError('missing required parameter: --metric') - - if opts.target_platform == 'cros': - # Run sudo up front to make sure credentials are cached for later. - print 'Sudo is required to build cros:' - print - RunProcess(['sudo', 'true']) - - if not opts.cros_board: - raise RuntimeError('missing required parameter: --cros_board') - - if not opts.cros_remote_ip: - raise RuntimeError('missing required parameter: --cros_remote_ip') - - if not opts.working_directory: - raise RuntimeError('missing required parameter: --working_directory') - - metric_values = opts.metric.split('/') - if len(metric_values) != 2: - raise RuntimeError("Invalid metric specified: [%s]" % opts.metric) - - opts.metric = metric_values - opts.repeat_test_count = min(max(opts.repeat_test_count, 1), 100) - opts.max_time_minutes = min(max(opts.max_time_minutes, 1), 60) - opts.truncate_percent = min(max(opts.truncate_percent, 0), 25) - opts.truncate_percent = opts.truncate_percent / 100.0 - - for k, v in opts.__dict__.iteritems(): - assert hasattr(self, k), "Invalid %s attribute in BisectOptions." % k - setattr(self, k, v) - except RuntimeError, e: - output_string = StringIO.StringIO() - parser.print_help(file=output_string) - error_message = '%s\n\n%s' % (e.message, output_string.getvalue()) - output_string.close() - raise RuntimeError(error_message) - - @staticmethod - def FromDict(values): - """Creates an instance of BisectOptions with the values parsed from a - .cfg file. - - Args: - values: a dict containing options to set. - - Returns: - An instance of BisectOptions. - """ - opts = BisectOptions() - - for k, v in values.iteritems(): - assert hasattr(opts, k), 'Invalid %s attribute in '\ - 'BisectOptions.' % k - setattr(opts, k, v) - - metric_values = opts.metric.split('/') - if len(metric_values) != 2: - raise RuntimeError("Invalid metric specified: [%s]" % opts.metric) - - opts.metric = metric_values - opts.repeat_test_count = min(max(opts.repeat_test_count, 1), 100) - opts.max_time_minutes = min(max(opts.max_time_minutes, 1), 60) - opts.truncate_percent = min(max(opts.truncate_percent, 0), 25) - opts.truncate_percent = opts.truncate_percent / 100.0 - - return opts - - -def main(): - - try: - opts = BisectOptions() - parse_results = opts.ParseCommandLine() - - if opts.extra_src: - extra_src = bisect_utils.LoadExtraSrc(opts.extra_src) - if not extra_src: - raise RuntimeError("Invalid or missing --extra_src.") - _AddAdditionalDepotInfo(extra_src.GetAdditionalDepotInfo()) - - if opts.working_directory: - custom_deps = bisect_utils.DEFAULT_GCLIENT_CUSTOM_DEPS - if opts.no_custom_deps: - custom_deps = None - bisect_utils.CreateBisectDirectoryAndSetupDepot(opts, custom_deps) - - os.chdir(os.path.join(os.getcwd(), 'src')) - - if not RemoveBuildFiles(): - raise RuntimeError('Something went wrong removing the build files.') - - if not IsPlatformSupported(opts): - raise RuntimeError("Sorry, this platform isn't supported yet.") - - # Check what source control method they're using. Only support git workflow - # at the moment. - source_control = DetermineAndCreateSourceControl(opts) - - if not source_control: - raise RuntimeError("Sorry, only the git workflow is supported at the " - "moment.") - - # gClient sync seems to fail if you're not in master branch. - if (not source_control.IsInProperBranch() and - not opts.debug_ignore_sync and - not opts.working_directory): - raise RuntimeError("You must switch to master branch to run bisection.") - - bisect_test = BisectPerformanceMetrics(source_control, opts) - try: - bisect_results = bisect_test.Run(opts.command, - opts.bad_revision, - opts.good_revision, - opts.metric) - if bisect_results['error']: - raise RuntimeError(bisect_results['error']) - bisect_test.FormatAndPrintResults(bisect_results) - return 0 - finally: - bisect_test.PerformCleanup() - except RuntimeError, e: - if opts.output_buildbot_annotations: - # The perf dashboard scrapes the "results" step in order to comment on - # bugs. If you change this, please update the perf dashboard as well. - bisect_utils.OutputAnnotationStepStart('Results') - print 'Error: %s' % e.message - if opts.output_buildbot_annotations: - bisect_utils.OutputAnnotationStepClosed() - return 1 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/bisect_test.py b/chromium/tools/bisect_test.py deleted file mode 100644 index b970f84e36d..00000000000 --- a/chromium/tools/bisect_test.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import unittest - -bisect_builds = __import__('bisect-builds') - - -class BisectTest(unittest.TestCase): - - patched = [] - max_rev = 10000 - - def monkey_patch(self, obj, name, new): - self.patched.append((obj, name, getattr(obj, name))) - setattr(obj, name, new) - - def clear_patching(self): - for obj, name, old in self.patched: - setattr(obj, name, old) - self.patched = [] - - def setUp(self): - self.monkey_patch(bisect_builds.DownloadJob, 'Start', lambda *args: None) - self.monkey_patch(bisect_builds.DownloadJob, 'Stop', lambda *args: None) - self.monkey_patch(bisect_builds.DownloadJob, 'WaitFor', lambda *args: None) - self.monkey_patch(bisect_builds, 'RunRevision', lambda *args: (0, "", "")) - self.monkey_patch(bisect_builds.PathContext, 'ParseDirectoryIndex', - lambda *args: range(self.max_rev)) - - def tearDown(self): - self.clear_patching() - - def bisect(self, good_rev, bad_rev, evaluate): - return bisect_builds.Bisect(good_rev=good_rev, - bad_rev=bad_rev, - evaluate=evaluate, - num_runs=1, - official_builds=False, - platform='linux', - profile=None, - try_args=()) - - def testBisectConsistentAnswer(self): - self.assertEqual(self.bisect(1000, 100, lambda *args: 'g'), (100, 101)) - self.assertEqual(self.bisect(100, 1000, lambda *args: 'b'), (100, 101)) - self.assertEqual(self.bisect(2000, 200, lambda *args: 'b'), (1999, 2000)) - self.assertEqual(self.bisect(200, 2000, lambda *args: 'g'), (1999, 2000)) - - -if __name__ == '__main__': - unittest.main() diff --git a/chromium/tools/bisect_utils.py b/chromium/tools/bisect_utils.py deleted file mode 100644 index 7bb33a31e73..00000000000 --- a/chromium/tools/bisect_utils.py +++ /dev/null @@ -1,503 +0,0 @@ -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Set of operations/utilities related to checking out the depot, and -outputting annotations on the buildbot waterfall. These are intended to be -used by the bisection scripts.""" - -import errno -import imp -import os -import shutil -import stat -import subprocess -import sys - -DEFAULT_GCLIENT_CUSTOM_DEPS = { - "src/data/page_cycler": "https://chrome-internal.googlesource.com/" - "chrome/data/page_cycler/.git", - "src/data/dom_perf": "https://chrome-internal.googlesource.com/" - "chrome/data/dom_perf/.git", - "src/data/mach_ports": "https://chrome-internal.googlesource.com/" - "chrome/data/mach_ports/.git", - "src/tools/perf/data": "https://chrome-internal.googlesource.com/" - "chrome/tools/perf/data/.git", - "src/third_party/adobe/flash/binaries/ppapi/linux": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/linux/.git", - "src/third_party/adobe/flash/binaries/ppapi/linux_x64": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/linux_x64/.git", - "src/third_party/adobe/flash/binaries/ppapi/mac": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/mac/.git", - "src/third_party/adobe/flash/binaries/ppapi/mac_64": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/mac_64/.git", - "src/third_party/adobe/flash/binaries/ppapi/win": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/win/.git", - "src/third_party/adobe/flash/binaries/ppapi/win_x64": - "https://chrome-internal.googlesource.com/" - "chrome/deps/adobe/flash/binaries/ppapi/win_x64/.git",} - -GCLIENT_SPEC_DATA = [ - { "name" : "src", - "url" : "https://chromium.googlesource.com/chromium/src.git", - "deps_file" : ".DEPS.git", - "managed" : True, - "custom_deps" : {}, - "safesync_url": "", - }, -] -GCLIENT_SPEC_ANDROID = "\ntarget_os = ['android']" -GCLIENT_CUSTOM_DEPS_V8 = {"src/v8_bleeding_edge": "git://github.com/v8/v8.git"} -FILE_DEPS_GIT = '.DEPS.git' - -REPO_PARAMS = [ - 'https://chrome-internal.googlesource.com/chromeos/manifest-internal/', - '--repo-url', - 'https://git.chromium.org/external/repo.git' -] - -REPO_SYNC_COMMAND = 'git checkout -f $(git rev-list --max-count=1 '\ - '--before=%d remotes/m/master)' - -ORIGINAL_ENV = {} - -def OutputAnnotationStepStart(name): - """Outputs appropriate annotation to signal the start of a step to - a trybot. - - Args: - name: The name of the step. - """ - print - print '@@@SEED_STEP %s@@@' % name - print '@@@STEP_CURSOR %s@@@' % name - print '@@@STEP_STARTED@@@' - print - sys.stdout.flush() - - -def OutputAnnotationStepClosed(): - """Outputs appropriate annotation to signal the closing of a step to - a trybot.""" - print - print '@@@STEP_CLOSED@@@' - print - sys.stdout.flush() - - -def OutputAnnotationStepLink(label, url): - """Outputs appropriate annotation to print a link. - - Args: - label: The name to print. - url: The url to print. - """ - print - print '@@@STEP_LINK@%s@%s@@@' % (label, url) - print - sys.stdout.flush() - - -def LoadExtraSrc(path_to_file): - """Attempts to load an extra source file. If this is successful, uses the - new module to override some global values, such as gclient spec data. - - Returns: - The loaded src module, or None.""" - try: - global GCLIENT_SPEC_DATA - global GCLIENT_SPEC_ANDROID - extra_src = imp.load_source('data', path_to_file) - GCLIENT_SPEC_DATA = extra_src.GetGClientSpec() - GCLIENT_SPEC_ANDROID = extra_src.GetGClientSpecExtraParams() - return extra_src - except ImportError, e: - return None - - -def IsTelemetryCommand(command): - """Attempts to discern whether or not a given command is running telemetry.""" - return ('tools/perf/run_' in command or 'tools\\perf\\run_' in command) - - -def CreateAndChangeToSourceDirectory(working_directory): - """Creates a directory 'bisect' as a subdirectory of 'working_directory'. If - the function is successful, the current working directory will change to that - of the new 'bisect' directory. - - Returns: - True if the directory was successfully created (or already existed). - """ - cwd = os.getcwd() - os.chdir(working_directory) - try: - os.mkdir('bisect') - except OSError, e: - if e.errno != errno.EEXIST: - return False - os.chdir('bisect') - return True - - -def SubprocessCall(cmd, cwd=None): - """Runs a subprocess with specified parameters. - - Args: - params: A list of parameters to pass to gclient. - cwd: Working directory to run from. - - Returns: - The return code of the call. - """ - if os.name == 'nt': - # "HOME" isn't normally defined on windows, but is needed - # for git to find the user's .netrc file. - if not os.getenv('HOME'): - os.environ['HOME'] = os.environ['USERPROFILE'] - shell = os.name == 'nt' - return subprocess.call(cmd, shell=shell, cwd=cwd) - - -def RunGClient(params, cwd=None): - """Runs gclient with the specified parameters. - - Args: - params: A list of parameters to pass to gclient. - cwd: Working directory to run from. - - Returns: - The return code of the call. - """ - cmd = ['gclient'] + params - - return SubprocessCall(cmd, cwd=cwd) - - -def RunRepo(params): - """Runs cros repo command with specified parameters. - - Args: - params: A list of parameters to pass to gclient. - - Returns: - The return code of the call. - """ - cmd = ['repo'] + params - - return SubprocessCall(cmd) - - -def RunRepoSyncAtTimestamp(timestamp): - """Syncs all git depots to the timestamp specified using repo forall. - - Args: - params: Unix timestamp to sync to. - - Returns: - The return code of the call. - """ - repo_sync = REPO_SYNC_COMMAND % timestamp - cmd = ['forall', '-c', REPO_SYNC_COMMAND % timestamp] - return RunRepo(cmd) - - -def RunGClientAndCreateConfig(opts, custom_deps=None, cwd=None): - """Runs gclient and creates a config containing both src and src-internal. - - Args: - opts: The options parsed from the command line through parse_args(). - custom_deps: A dictionary of additional dependencies to add to .gclient. - cwd: Working directory to run from. - - Returns: - The return code of the call. - """ - spec = GCLIENT_SPEC_DATA - - if custom_deps: - for k, v in custom_deps.iteritems(): - spec[0]['custom_deps'][k] = v - - # Cannot have newlines in string on windows - spec = 'solutions =' + str(spec) - spec = ''.join([l for l in spec.splitlines()]) - - if 'android' in opts.target_platform: - spec += GCLIENT_SPEC_ANDROID - - return_code = RunGClient( - ['config', '--spec=%s' % spec, '--git-deps'], cwd=cwd) - return return_code - - -def IsDepsFileBlink(): - """Reads .DEPS.git and returns whether or not we're using blink. - - Returns: - True if blink, false if webkit. - """ - locals = {'Var': lambda _: locals["vars"][_], - 'From': lambda *args: None} - execfile(FILE_DEPS_GIT, {}, locals) - return 'blink.git' in locals['vars']['webkit_url'] - - -def RemoveThirdPartyWebkitDirectory(): - """Removes third_party/WebKit. - - Returns: - True on success. - """ - try: - path_to_dir = os.path.join(os.getcwd(), 'third_party', 'WebKit') - if os.path.exists(path_to_dir): - shutil.rmtree(path_to_dir) - except OSError, e: - if e.errno != errno.ENOENT: - return False - return True - - -def OnAccessError(func, path, exc_info): - """ - Source: http://stackoverflow.com/questions/2656322/python-shutil-rmtree-fails-on-windows-with-access-is-denied - - Error handler for ``shutil.rmtree``. - - If the error is due to an access error (read only file) - it attempts to add write permission and then retries. - - If the error is for another reason it re-raises the error. - - Args: - func: The function that raised the error. - path: The path name passed to func. - exc_info: Exception information returned by sys.exc_info(). - """ - if not os.access(path, os.W_OK): - # Is the error an access error ? - os.chmod(path, stat.S_IWUSR) - func(path) - else: - raise - - -def RemoveThirdPartyLibjingleDirectory(): - """Removes third_party/libjingle. At some point, libjingle was causing issues - syncing when using the git workflow (crbug.com/266324). - - Returns: - True on success. - """ - path_to_dir = os.path.join(os.getcwd(), 'third_party', 'libjingle') - try: - if os.path.exists(path_to_dir): - shutil.rmtree(path_to_dir, onerror=OnAccessError) - except OSError, e: - print 'Error #%d while running shutil.rmtree(%s): %s' % ( - e.errno, path_to_dir, str(e)) - if e.errno != errno.ENOENT: - return False - return True - - -def _CleanupPreviousGitRuns(): - """Performs necessary cleanup between runs.""" - # If a previous run of git crashed, bot was reset, etc... we - # might end up with leftover index.lock files. - for (path, dir, files) in os.walk(os.getcwd()): - for cur_file in files: - if cur_file.endswith('index.lock'): - path_to_file = os.path.join(path, cur_file) - os.remove(path_to_file) - - -def RunGClientAndSync(cwd=None): - """Runs gclient and does a normal sync. - - Args: - cwd: Working directory to run from. - - Returns: - The return code of the call. - """ - params = ['sync', '--verbose', '--nohooks', '--reset', '--force'] - return RunGClient(params, cwd=cwd) - - -def SetupGitDepot(opts, custom_deps): - """Sets up the depot for the bisection. The depot will be located in a - subdirectory called 'bisect'. - - Args: - opts: The options parsed from the command line through parse_args(). - custom_deps: A dictionary of additional dependencies to add to .gclient. - - Returns: - True if gclient successfully created the config file and did a sync, False - otherwise. - """ - name = 'Setting up Bisection Depot' - - if opts.output_buildbot_annotations: - OutputAnnotationStepStart(name) - - passed = False - - if not RunGClientAndCreateConfig(opts, custom_deps): - passed_deps_check = True - if os.path.isfile(os.path.join('src', FILE_DEPS_GIT)): - cwd = os.getcwd() - os.chdir('src') - if not IsDepsFileBlink(): - passed_deps_check = RemoveThirdPartyWebkitDirectory() - else: - passed_deps_check = True - if passed_deps_check: - passed_deps_check = RemoveThirdPartyLibjingleDirectory() - os.chdir(cwd) - - if passed_deps_check: - _CleanupPreviousGitRuns() - - RunGClient(['revert']) - if not RunGClientAndSync(): - passed = True - - if opts.output_buildbot_annotations: - print - OutputAnnotationStepClosed() - - return passed - - -def SetupCrosRepo(): - """Sets up cros repo for bisecting chromeos. - - Returns: - Returns 0 on success. - """ - cwd = os.getcwd() - try: - os.mkdir('cros') - except OSError, e: - if e.errno != errno.EEXIST: - return False - os.chdir('cros') - - cmd = ['init', '-u'] + REPO_PARAMS - - passed = False - - if not RunRepo(cmd): - if not RunRepo(['sync']): - passed = True - os.chdir(cwd) - - return passed - - -def CopyAndSaveOriginalEnvironmentVars(): - """Makes a copy of the current environment variables.""" - # TODO: Waiting on crbug.com/255689, will remove this after. - vars_to_remove = [] - for k, v in os.environ.iteritems(): - if 'ANDROID' in k: - vars_to_remove.append(k) - vars_to_remove.append('CHROME_SRC') - vars_to_remove.append('CHROMIUM_GYP_FILE') - vars_to_remove.append('GYP_CROSSCOMPILE') - vars_to_remove.append('GYP_DEFINES') - vars_to_remove.append('GYP_GENERATORS') - vars_to_remove.append('GYP_GENERATOR_FLAGS') - vars_to_remove.append('OBJCOPY') - for k in vars_to_remove: - if os.environ.has_key(k): - del os.environ[k] - - global ORIGINAL_ENV - ORIGINAL_ENV = os.environ.copy() - - -def SetupAndroidBuildEnvironment(opts, path_to_src=None): - """Sets up the android build environment. - - Args: - opts: The options parsed from the command line through parse_args(). - path_to_src: Path to the src checkout. - - Returns: - True if successful. - """ - - # Revert the environment variables back to default before setting them up - # with envsetup.sh. - env_vars = os.environ.copy() - for k, _ in env_vars.iteritems(): - del os.environ[k] - for k, v in ORIGINAL_ENV.iteritems(): - os.environ[k] = v - - path_to_file = os.path.join('build', 'android', 'envsetup.sh') - proc = subprocess.Popen(['bash', '-c', 'source %s && env' % path_to_file], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - cwd=path_to_src) - (out, _) = proc.communicate() - - for line in out.splitlines(): - (k, _, v) = line.partition('=') - os.environ[k] = v - - return not proc.returncode - - -def SetupPlatformBuildEnvironment(opts): - """Performs any platform specific setup. - - Args: - opts: The options parsed from the command line through parse_args(). - - Returns: - True if successful. - """ - if 'android' in opts.target_platform: - CopyAndSaveOriginalEnvironmentVars() - return SetupAndroidBuildEnvironment(opts) - elif opts.target_platform == 'cros': - return SetupCrosRepo() - - return True - - -def CheckIfBisectDepotExists(opts): - """Checks if the bisect directory already exists. - - Args: - opts: The options parsed from the command line through parse_args(). - - Returns: - Returns True if it exists. - """ - path_to_dir = os.path.join(opts.working_directory, 'bisect', 'src') - return os.path.exists(path_to_dir) - - -def CreateBisectDirectoryAndSetupDepot(opts, custom_deps): - """Sets up a subdirectory 'bisect' and then retrieves a copy of the depot - there using gclient. - - Args: - opts: The options parsed from the command line through parse_args(). - custom_deps: A dictionary of additional dependencies to add to .gclient. - """ - if not CreateAndChangeToSourceDirectory(opts.working_directory): - raise RuntimeError('Could not create bisect directory.') - - if not SetupGitDepot(opts, custom_deps): - raise RuntimeError('Failed to grab source.') diff --git a/chromium/tools/check_ecs_deps/check_ecs_deps.py b/chromium/tools/check_ecs_deps/check_ecs_deps.py deleted file mode 100755 index f6760d65b5f..00000000000 --- a/chromium/tools/check_ecs_deps/check_ecs_deps.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env python -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -''' Verifies that builds of the embedded content_shell do not included -unnecessary dependencies.''' - -import os -import re -import string -import subprocess -import sys -import optparse - -kUndesiredLibraryList = [ - 'libX11', - 'libXau', - 'libXcomposite', - 'libXcursor', - 'libXdamage', - 'libXdmcp', - 'libXext', - 'libXfixes', - 'libXi', - 'libXrandr', - 'libXrender', - 'libXtst', - 'libasound', - 'libcairo', - 'libdbus', - 'libffi', - 'libgconf', - 'libgio', - 'libglib', - 'libgmodule', - 'libgobject', - 'libpango', - 'libpcre', - 'libpixman', - 'libpng', - 'libresolv', - 'libselinux', - 'libudev', - 'libxcb', -] - -kAllowedLibraryList = [ - # Toolchain libraries (gcc/glibc) - 'ld-linux', - 'libc', - 'libdl', - 'libgcc_s', - 'libm', - 'libpthread', - 'librt', - 'libstdc++', - 'linux-vdso', - - # Needed for default ozone platforms - 'libdrm', - - # NSS & NSPR - 'libnss3', - 'libnssutil3', - 'libnspr4', - 'libplc4', - 'libplds4', - 'libsmime3', - - # Miscellaneous - 'libcap', - 'libexpat', - 'libfontconfig', - 'libz', -] - -binary_target = 'content_shell' - -def stdmsg(_final, errors): - if errors: - for message in errors: - print message - -def bbmsg(final, errors): - if errors: - for message in errors: - print '@@@STEP_TEXT@%s@@@' % message - if final: - print '\n@@@STEP_%s@@@' % final - - -def _main(): - output = { - 'message': lambda x: stdmsg(None, x), - 'fail': lambda x: stdmsg('FAILED', x), - 'warn': lambda x: stdmsg('WARNING', x), - 'abend': lambda x: stdmsg('FAILED', x), - 'ok': lambda x: stdmsg('SUCCESS', x), - 'verbose': lambda x: None, - } - - parser = optparse.OptionParser( - "usage: %prog -b --target ") - parser.add_option("", "--annotate", dest='annotate', action='store_true', - default=False, help="include buildbot annotations in output") - parser.add_option("", "--noannotate", dest='annotate', action='store_false') - parser.add_option("-b", "--build-dir", - help="the location of the compiler output") - parser.add_option("--target", help="Debug or Release") - parser.add_option('-v', '--verbose', default=False, action='store_true') - - options, args = parser.parse_args() - if args: - parser.usage() - return -1 - - # Bake target into build_dir. - if options.target and options.build_dir: - assert (options.target != - os.path.basename(os.path.dirname(options.build_dir))) - options.build_dir = os.path.join(os.path.abspath(options.build_dir), - options.target) - - if options.build_dir != None: - build_dir = os.path.abspath(options.build_dir) - else: - build_dir = os.getcwd() - - target = os.path.join(build_dir, binary_target) - - if options.annotate: - output.update({ - 'message': lambda x: bbmsg(None, x), - 'fail': lambda x: bbmsg('FAILURE', x), - 'warn': lambda x: bbmsg('WARNINGS', x), - 'abend': lambda x: bbmsg('EXCEPTIONS', x), - 'ok': lambda x: bbmsg(None, x), - }) - - if options.verbose: - output['verbose'] = lambda x: stdmsg(None, x) - - forbidden_regexp = re.compile(string.join(map(re.escape, - kUndesiredLibraryList), '|')) - mapping_regexp = re.compile(r"\s*([^/]*) => (.*)") - blessed_regexp = re.compile(r"(%s)[-0-9.]*\.so" % string.join(map(re.escape, - kAllowedLibraryList), '|')) - built_regexp = re.compile(re.escape(build_dir + os.sep)) - - success = 0 - warning = 0 - - p = subprocess.Popen(['ldd', target], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - out, err = p.communicate() - - if err != '': - output['abend']([ - 'Failed to execute ldd to analyze dependencies for ' + target + ':', - ' ' + err, - ]) - return 1 - - if out == '': - output['abend']([ - 'No output to scan for forbidden dependencies.' - ]) - return 1 - - success = 1 - deps = string.split(out, '\n') - for d in deps: - libmatch = mapping_regexp.match(d) - if libmatch: - lib = libmatch.group(1) - source = libmatch.group(2) - if forbidden_regexp.search(lib): - success = 0 - output['message'](['Forbidden library: ' + lib]) - elif built_regexp.match(source): - output['verbose'](['Built library: ' + lib]) - elif blessed_regexp.match(lib): - output['verbose'](['Blessed library: ' + lib]) - else: - warning = 1 - output['message'](['Unexpected library: ' + lib]) - - if success == 1: - if warning == 1: - output['warn'](None) - else: - output['ok'](None) - return 0 - else: - output['fail'](None) - return 1 - -if __name__ == "__main__": - # handle arguments... - # do something reasonable if not run with one... - sys.exit(_main()) diff --git a/chromium/tools/checkbins/checkbins.py b/chromium/tools/checkbins/checkbins.py deleted file mode 100755 index e166eec5514..00000000000 --- a/chromium/tools/checkbins/checkbins.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Makes sure that all EXE and DLL files in the provided directory were built -correctly. - -In essense it runs a subset of BinScope tests ensuring that binaries have -/NXCOMPAT, /DYNAMICBASE and /SAFESEH. -""" - -import os -import optparse -import sys - -# Find /third_party/pefile based on current directory and script path. -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', - 'third_party', 'pefile')) -import pefile - -PE_FILE_EXTENSIONS = ['.exe', '.dll'] -DYNAMICBASE_FLAG = 0x0040 -NXCOMPAT_FLAG = 0x0100 -NO_SEH_FLAG = 0x0400 -MACHINE_TYPE_AMD64 = 0x8664 - -# Please do not add your file here without confirming that it indeed doesn't -# require /NXCOMPAT and /DYNAMICBASE. Contact cpu@chromium.org or your local -# Windows guru for advice. -EXCLUDED_FILES = ['chrome_frame_mini_installer.exe', - 'mini_installer.exe', - 'wow_helper.exe', - 'xinput1_3.dll' # Microsoft DirectX redistributable. - ] - -def IsPEFile(path): - return (os.path.isfile(path) and - os.path.splitext(path)[1].lower() in PE_FILE_EXTENSIONS and - os.path.basename(path) not in EXCLUDED_FILES) - -def main(options, args): - directory = args[0] - pe_total = 0 - pe_passed = 0 - - for file in os.listdir(directory): - path = os.path.abspath(os.path.join(directory, file)) - if not IsPEFile(path): - continue - pe = pefile.PE(path, fast_load=True) - pe.parse_data_directories(directories=[ - pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG']]) - pe_total = pe_total + 1 - success = True - - # Check for /DYNAMICBASE. - if pe.OPTIONAL_HEADER.DllCharacteristics & DYNAMICBASE_FLAG: - if options.verbose: - print "Checking %s for /DYNAMICBASE... PASS" % path - else: - success = False - print "Checking %s for /DYNAMICBASE... FAIL" % path - - # Check for /NXCOMPAT. - if pe.OPTIONAL_HEADER.DllCharacteristics & NXCOMPAT_FLAG: - if options.verbose: - print "Checking %s for /NXCOMPAT... PASS" % path - else: - success = False - print "Checking %s for /NXCOMPAT... FAIL" % path - - # Check for /SAFESEH. Binaries should meet one of the following - # criteria: - # 1) Have no SEH table as indicated by the DLL characteristics - # 2) Have a LOAD_CONFIG section containing a valid SEH table - # 3) Be a 64-bit binary, in which case /SAFESEH isn't required - # - # Refer to the following MSDN article for more information: - # http://msdn.microsoft.com/en-us/library/9a89h429.aspx - if (pe.OPTIONAL_HEADER.DllCharacteristics & NO_SEH_FLAG or - (hasattr(pe, "DIRECTORY_ENTRY_LOAD_CONFIG") and - pe.DIRECTORY_ENTRY_LOAD_CONFIG.struct.SEHandlerCount > 0 and - pe.DIRECTORY_ENTRY_LOAD_CONFIG.struct.SEHandlerTable != 0) or - pe.FILE_HEADER.Machine == MACHINE_TYPE_AMD64): - if options.verbose: - print "Checking %s for /SAFESEH... PASS" % path - else: - success = False - print "Checking %s for /SAFESEH... FAIL" % path - - # Update tally. - if success: - pe_passed = pe_passed + 1 - - print "Result: %d files found, %d files passed" % (pe_total, pe_passed) - if pe_passed != pe_total: - sys.exit(1) - -if __name__ == '__main__': - usage = "Usage: %prog [options] DIRECTORY" - option_parser = optparse.OptionParser(usage=usage) - option_parser.add_option("-v", "--verbose", action="store_true", - default=False, help="Print debug logging") - options, args = option_parser.parse_args() - if not args: - option_parser.print_help() - sys.exit(0) - main(options, args) diff --git a/chromium/tools/checkdeps/DEPS b/chromium/tools/checkdeps/DEPS deleted file mode 100644 index 7a57b0bcc8e..00000000000 --- a/chromium/tools/checkdeps/DEPS +++ /dev/null @@ -1,3 +0,0 @@ -skip_child_includes = [ - "testdata", -] diff --git a/chromium/tools/checkdeps/PRESUBMIT.py b/chromium/tools/checkdeps/PRESUBMIT.py deleted file mode 100644 index 10ef63212fa..00000000000 --- a/chromium/tools/checkdeps/PRESUBMIT.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Presubmit script for checkdeps tool. -""" - - -def CheckChange(input_api, output_api): - results = [] - results.extend(input_api.canned_checks.RunUnitTests( - input_api, output_api, - [input_api.os_path.join(input_api.PresubmitLocalPath(), - 'checkdeps_test.py')])) - return results - - -# Mandatory entrypoint. -def CheckChangeOnUpload(input_api, output_api): - return CheckChange(input_api, output_api) - - -# Mandatory entrypoint. -def CheckChangeOnCommit(input_api, output_api): - return CheckChange(input_api, output_api) diff --git a/chromium/tools/checkdeps/builddeps.py b/chromium/tools/checkdeps/builddeps.py deleted file mode 100755 index 5fa37934cbb..00000000000 --- a/chromium/tools/checkdeps/builddeps.py +++ /dev/null @@ -1,348 +0,0 @@ -#!/usr/bin/env python -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Traverses the source tree, parses all found DEPS files, and constructs -a dependency rule table to be used by subclasses. - -The format of the deps file: - -First you have the normal module-level deps. These are the ones used by -gclient. An example would be: - - deps = { - "base":"http://foo.bar/trunk/base" - } - -DEPS files not in the top-level of a module won't need this. Then you -have any additional include rules. You can add (using "+") or subtract -(using "-") from the previously specified rules (including -module-level deps). You can also specify a path that is allowed for -now but that we intend to remove, using "!"; this is treated the same -as "+" when check_deps is run by our bots, but a presubmit step will -show a warning if you add a new include of a file that is only allowed -by "!". - -Note that for .java files, there is currently no difference between -"+" and "!", even in the presubmit step. - - include_rules = [ - # Code should be able to use base (it's specified in the module-level - # deps above), but nothing in "base/evil" because it's evil. - "-base/evil", - - # But this one subdirectory of evil is OK. - "+base/evil/not", - - # And it can include files from this other directory even though there is - # no deps rule for it. - "+tools/crime_fighter", - - # This dependency is allowed for now but work is ongoing to remove it, - # so you shouldn't add further dependencies on it. - "!base/evil/ok_for_now.h", - ] - -If you have certain include rules that should only be applied for some -files within this directory and subdirectories, you can write a -section named specific_include_rules that is a hash map of regular -expressions to the list of rules that should apply to files matching -them. Note that such rules will always be applied before the rules -from 'include_rules' have been applied, but the order in which rules -associated with different regular expressions is applied is arbitrary. - - specific_include_rules = { - ".*_(unit|browser|api)test\.cc": [ - "+libraries/testsupport", - ], - } - -DEPS files may be placed anywhere in the tree. Each one applies to all -subdirectories, where there may be more DEPS files that provide additions or -subtractions for their own sub-trees. - -There is an implicit rule for the current directory (where the DEPS file lives) -and all of its subdirectories. This prevents you from having to explicitly -allow the current directory everywhere. This implicit rule is applied first, -so you can modify or remove it using the normal include rules. - -The rules are processed in order. This means you can explicitly allow a higher -directory and then take away permissions from sub-parts, or the reverse. - -Note that all directory separators must be slashes (Unix-style) and not -backslashes. All directories should be relative to the source root and use -only lowercase. -""" - -import os -import subprocess -import copy - -from rules import Rule, Rules - - -# Variable name used in the DEPS file to add or subtract include files from -# the module-level deps. -INCLUDE_RULES_VAR_NAME = 'include_rules' - -# Variable name used in the DEPS file to add or subtract include files -# from module-level deps specific to files whose basename (last -# component of path) matches a given regular expression. -SPECIFIC_INCLUDE_RULES_VAR_NAME = 'specific_include_rules' - -# Optionally present in the DEPS file to list subdirectories which should not -# be checked. This allows us to skip third party code, for example. -SKIP_SUBDIRS_VAR_NAME = 'skip_child_includes' - - -def NormalizePath(path): - """Returns a path normalized to how we write DEPS rules and compare paths. - """ - return path.lower().replace('\\', '/') - - -class DepsBuilder(object): - """Parses include_rules from DEPS files. - """ - - def __init__(self, - base_directory=None, - verbose=False, - being_tested=False, - ignore_temp_rules=False, - ignore_specific_rules=False): - """Creates a new DepsBuilder. - - Args: - base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src. - verbose: Set to true for debug output. - being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS. - ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!"). - """ - self.base_directory = base_directory - self.verbose = verbose - self._under_test = being_tested - self._ignore_temp_rules = ignore_temp_rules - self._ignore_specific_rules = ignore_specific_rules - - if not base_directory: - self.base_directory = os.path.abspath( - os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', '..')) - - self.git_source_directories = set() - self._AddGitSourceDirectories() - - # Map of normalized directory paths to rules to use for those - # directories, or None for directories that should be skipped. - self.directory_rules = {} - self._ApplyDirectoryRulesAndSkipSubdirs(Rules(), self.base_directory) - - def _ApplyRules(self, existing_rules, includes, specific_includes, cur_dir): - """Applies the given include rules, returning the new rules. - - Args: - existing_rules: A set of existing rules that will be combined. - include: The list of rules from the "include_rules" section of DEPS. - specific_includes: E.g. {'.*_unittest\.cc': ['+foo', '-blat']} rules - from the "specific_include_rules" section of DEPS. - cur_dir: The current directory, normalized path. We will create an - implicit rule that allows inclusion from this directory. - - Returns: A new set of rules combining the existing_rules with the other - arguments. - """ - rules = copy.deepcopy(existing_rules) - - # First apply the implicit "allow" rule for the current directory. - if cur_dir.startswith( - NormalizePath(os.path.normpath(self.base_directory))): - relative_dir = cur_dir[len(self.base_directory) + 1:] - - source = relative_dir - if len(source) == 0: - source = 'top level' # Make the help string a little more meaningful. - rules.AddRule('+' + relative_dir, - relative_dir, - 'Default rule for ' + source) - else: - raise Exception('Internal error: base directory is not at the beginning' + - ' for\n %s and base dir\n %s' % - (cur_dir, self.base_directory)) - - def ApplyOneRule(rule_str, cur_dir, dependee_regexp=None): - """Deduces a sensible description for the rule being added, and - adds the rule with its description to |rules|. - - If we are ignoring temporary rules, this function does nothing - for rules beginning with the Rule.TEMP_ALLOW character. - """ - if self._ignore_temp_rules and rule_str.startswith(Rule.TEMP_ALLOW): - return - - rule_block_name = 'include_rules' - if dependee_regexp: - rule_block_name = 'specific_include_rules' - if not relative_dir: - rule_description = 'the top level %s' % rule_block_name - else: - rule_description = relative_dir + "'s %s" % rule_block_name - rules.AddRule(rule_str, relative_dir, rule_description, dependee_regexp) - - # Apply the additional explicit rules. - for (_, rule_str) in enumerate(includes): - ApplyOneRule(rule_str, cur_dir) - - # Finally, apply the specific rules. - if not self._ignore_specific_rules: - for regexp, specific_rules in specific_includes.iteritems(): - for rule_str in specific_rules: - ApplyOneRule(rule_str, cur_dir, regexp) - - return rules - - def _ApplyDirectoryRules(self, existing_rules, dir_name): - """Combines rules from the existing rules and the new directory. - - Any directory can contain a DEPS file. Toplevel DEPS files can contain - module dependencies which are used by gclient. We use these, along with - additional include rules and implicit rules for the given directory, to - come up with a combined set of rules to apply for the directory. - - Args: - existing_rules: The rules for the parent directory. We'll add-on to these. - dir_name: The directory name that the deps file may live in (if - it exists). This will also be used to generate the - implicit rules. This is a non-normalized path. - - Returns: A tuple containing: (1) the combined set of rules to apply to the - sub-tree, and (2) a list of all subdirectories that should NOT be - checked, as specified in the DEPS file (if any). - """ - norm_dir_name = NormalizePath(dir_name) - - # Check for a .svn directory in this directory or check this directory is - # contained in git source direcotries. This will tell us if it's a source - # directory and should be checked. - if not (os.path.exists(os.path.join(dir_name, ".svn")) or - (norm_dir_name in self.git_source_directories)): - return (None, []) - - # Check the DEPS file in this directory. - if self.verbose: - print 'Applying rules from', dir_name - def FromImpl(_unused, _unused2): - pass # NOP function so "From" doesn't fail. - - def FileImpl(_unused): - pass # NOP function so "File" doesn't fail. - - class _VarImpl: - def __init__(self, local_scope): - self._local_scope = local_scope - - def Lookup(self, var_name): - """Implements the Var syntax.""" - if var_name in self._local_scope.get('vars', {}): - return self._local_scope['vars'][var_name] - raise Exception('Var is not defined: %s' % var_name) - - local_scope = {} - global_scope = { - 'File': FileImpl, - 'From': FromImpl, - 'Var': _VarImpl(local_scope).Lookup, - } - deps_file = os.path.join(dir_name, 'DEPS') - - # The second conditional here is to disregard the - # tools/checkdeps/DEPS file while running tests. This DEPS file - # has a skip_child_includes for 'testdata' which is necessary for - # running production tests, since there are intentional DEPS - # violations under the testdata directory. On the other hand when - # running tests, we absolutely need to verify the contents of that - # directory to trigger those intended violations and see that they - # are handled correctly. - if os.path.isfile(deps_file) and ( - not self._under_test or not os.path.split(dir_name)[1] == 'checkdeps'): - execfile(deps_file, global_scope, local_scope) - elif self.verbose: - print ' No deps file found in', dir_name - - # Even if a DEPS file does not exist we still invoke ApplyRules - # to apply the implicit "allow" rule for the current directory - include_rules = local_scope.get(INCLUDE_RULES_VAR_NAME, []) - specific_include_rules = local_scope.get(SPECIFIC_INCLUDE_RULES_VAR_NAME, - {}) - skip_subdirs = local_scope.get(SKIP_SUBDIRS_VAR_NAME, []) - - return (self._ApplyRules(existing_rules, include_rules, - specific_include_rules, norm_dir_name), - skip_subdirs) - - def _ApplyDirectoryRulesAndSkipSubdirs(self, parent_rules, dir_path): - """Given |parent_rules| and a subdirectory |dir_path| from the - directory that owns the |parent_rules|, add |dir_path|'s rules to - |self.directory_rules|, and add None entries for any of its - subdirectories that should be skipped. - """ - directory_rules, excluded_subdirs = self._ApplyDirectoryRules(parent_rules, - dir_path) - self.directory_rules[NormalizePath(dir_path)] = directory_rules - for subdir in excluded_subdirs: - self.directory_rules[NormalizePath( - os.path.normpath(os.path.join(dir_path, subdir)))] = None - - def GetDirectoryRules(self, dir_path): - """Returns a Rules object to use for the given directory, or None - if the given directory should be skipped. This takes care of - first building rules for parent directories (up to - self.base_directory) if needed. - - Args: - dir_path: A real (non-normalized) path to the directory you want - rules for. - """ - norm_dir_path = NormalizePath(dir_path) - - if not norm_dir_path.startswith( - NormalizePath(os.path.normpath(self.base_directory))): - dir_path = os.path.join(self.base_directory, dir_path) - norm_dir_path = NormalizePath(dir_path) - - parent_dir = os.path.dirname(dir_path) - parent_rules = None - if not norm_dir_path in self.directory_rules: - parent_rules = self.GetDirectoryRules(parent_dir) - - # We need to check for an entry for our dir_path again, in case we - # are at a path e.g. A/B/C where A/B/DEPS specifies the C - # subdirectory to be skipped; in this case, the invocation to - # GetDirectoryRules(parent_dir) has already filled in an entry for - # A/B/C. - if not norm_dir_path in self.directory_rules: - if not parent_rules: - # If the parent directory should be skipped, then the current - # directory should also be skipped. - self.directory_rules[norm_dir_path] = None - else: - self._ApplyDirectoryRulesAndSkipSubdirs(parent_rules, dir_path) - return self.directory_rules[norm_dir_path] - - def _AddGitSourceDirectories(self): - """Adds any directories containing sources managed by git to - self.git_source_directories. - """ - if not os.path.exists(os.path.join(self.base_directory, '.git')): - return - - popen_out = os.popen('cd %s && git ls-files --full-name .' % - subprocess.list2cmdline([self.base_directory])) - for line in popen_out.readlines(): - dir_name = os.path.join(self.base_directory, os.path.dirname(line)) - # Add the directory as well as all the parent directories. Use - # forward slashes and lower case to normalize paths. - while dir_name != self.base_directory: - self.git_source_directories.add(NormalizePath(dir_name)) - dir_name = os.path.dirname(dir_name) - self.git_source_directories.add(NormalizePath(self.base_directory)) diff --git a/chromium/tools/checkdeps/checkdeps.py b/chromium/tools/checkdeps/checkdeps.py deleted file mode 100755 index c486a6270a4..00000000000 --- a/chromium/tools/checkdeps/checkdeps.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env python -# Copyright 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Makes sure that files include headers from allowed directories. - -Checks DEPS files in the source tree for rules, and applies those rules to -"#include" and "import" directives in the .cpp and .java source files. -Any source file including something not permitted by the DEPS files will fail. - -See builddeps.py for a detailed description of the DEPS format. -""" - -import os -import optparse -import re -import sys - -import cpp_checker -import java_checker -import results - -from builddeps import DepsBuilder -from rules import Rule, Rules - - -def _IsTestFile(filename): - """Does a rudimentary check to try to skip test files; this could be - improved but is good enough for now. - """ - return re.match('(test|mock|dummy)_.*|.*_[a-z]*test\.(cc|mm|java)', filename) - - -class DepsChecker(DepsBuilder): - """Parses include_rules from DEPS files and erifies files in the - source tree against them. - """ - - def __init__(self, - base_directory=None, - verbose=False, - being_tested=False, - ignore_temp_rules=False, - skip_tests=False): - """Creates a new DepsChecker. - - Args: - base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src. - verbose: Set to true for debug output. - being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS. - ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!"). - """ - DepsBuilder.__init__( - self, base_directory, verbose, being_tested, ignore_temp_rules) - - self._skip_tests = skip_tests - self.results_formatter = results.NormalResultsFormatter(verbose) - - def Report(self): - """Prints a report of results, and returns an exit code for the process.""" - if self.results_formatter.GetResults(): - self.results_formatter.PrintResults() - return 1 - print '\nSUCCESS\n' - return 0 - - def CheckDirectory(self, start_dir): - """Checks all relevant source files in the specified directory and - its subdirectories for compliance with DEPS rules throughout the - tree (starting at |self.base_directory|). |start_dir| must be a - subdirectory of |self.base_directory|. - - On completion, self.results_formatter has the results of - processing, and calling Report() will print a report of results. - """ - java = java_checker.JavaChecker(self.base_directory, self.verbose) - cpp = cpp_checker.CppChecker(self.verbose) - checkers = dict( - (extension, checker) - for checker in [java, cpp] for extension in checker.EXTENSIONS) - self._CheckDirectoryImpl(checkers, start_dir) - - def _CheckDirectoryImpl(self, checkers, dir_name): - rules = self.GetDirectoryRules(dir_name) - if rules == None: - return - - # Collect a list of all files and directories to check. - files_to_check = [] - dirs_to_check = [] - contents = os.listdir(dir_name) - for cur in contents: - full_name = os.path.join(dir_name, cur) - if os.path.isdir(full_name): - dirs_to_check.append(full_name) - elif os.path.splitext(full_name)[1] in checkers: - if not self._skip_tests or not _IsTestFile(cur): - files_to_check.append(full_name) - - # First check all files in this directory. - for cur in files_to_check: - checker = checkers[os.path.splitext(cur)[1]] - file_status = checker.CheckFile(rules, cur) - if file_status.HasViolations(): - self.results_formatter.AddError(file_status) - - # Next recurse into the subdirectories. - for cur in dirs_to_check: - self._CheckDirectoryImpl(checkers, cur) - - def CheckAddedCppIncludes(self, added_includes): - """This is used from PRESUBMIT.py to check new #include statements added in - the change being presubmit checked. - - Args: - added_includes: ((file_path, (include_line, include_line, ...), ...) - - Return: - A list of tuples, (bad_file_path, rule_type, rule_description) - where rule_type is one of Rule.DISALLOW or Rule.TEMP_ALLOW and - rule_description is human-readable. Empty if no problems. - """ - cpp = cpp_checker.CppChecker(self.verbose) - problems = [] - for file_path, include_lines in added_includes: - if not cpp.IsCppFile(file_path): - pass - rules_for_file = self.GetDirectoryRules(os.path.dirname(file_path)) - if rules_for_file: - for line in include_lines: - is_include, violation = cpp.CheckLine( - rules_for_file, line, file_path, True) - if violation: - rule_type = violation.violated_rule.allow - if rule_type != Rule.ALLOW: - violation_text = results.NormalResultsFormatter.FormatViolation( - violation, self.verbose) - problems.append((file_path, rule_type, violation_text)) - return problems - - -def PrintUsage(): - print """Usage: python checkdeps.py [--root ] [tocheck] - - --root ROOT Specifies the repository root. This defaults to "../../.." - relative to the script file. This will be correct given the - normal location of the script in "/tools/checkdeps". - - --(others) There are a few lesser-used options; run with --help to show them. - - tocheck Specifies the directory, relative to root, to check. This defaults - to "." so it checks everything. - -Examples: - python checkdeps.py - python checkdeps.py --root c:\\source chrome""" - - -def main(): - option_parser = optparse.OptionParser() - option_parser.add_option( - '', '--root', - default='', dest='base_directory', - help='Specifies the repository root. This defaults ' - 'to "../../.." relative to the script file, which ' - 'will normally be the repository root.') - option_parser.add_option( - '', '--ignore-temp-rules', - action='store_true', dest='ignore_temp_rules', default=False, - help='Ignore !-prefixed (temporary) rules.') - option_parser.add_option( - '', '--generate-temp-rules', - action='store_true', dest='generate_temp_rules', default=False, - help='Print rules to temporarily allow files that fail ' - 'dependency checking.') - option_parser.add_option( - '', '--count-violations', - action='store_true', dest='count_violations', default=False, - help='Count #includes in violation of intended rules.') - option_parser.add_option( - '', '--skip-tests', - action='store_true', dest='skip_tests', default=False, - help='Skip checking test files (best effort).') - option_parser.add_option( - '-v', '--verbose', - action='store_true', default=False, - help='Print debug logging') - option_parser.add_option( - '', '--json', - help='Path to JSON output file') - options, args = option_parser.parse_args() - - deps_checker = DepsChecker(options.base_directory, - verbose=options.verbose, - ignore_temp_rules=options.ignore_temp_rules, - skip_tests=options.skip_tests) - - # Figure out which directory we have to check. - start_dir = deps_checker.base_directory - if len(args) == 1: - # Directory specified. Start here. It's supposed to be relative to the - # base directory. - start_dir = os.path.abspath( - os.path.join(deps_checker.base_directory, args[0])) - elif len(args) >= 2 or (options.generate_temp_rules and - options.count_violations): - # More than one argument, or incompatible flags, we don't handle this. - PrintUsage() - return 1 - - print 'Using base directory:', deps_checker.base_directory - print 'Checking:', start_dir - - if options.generate_temp_rules: - deps_checker.results_formatter = results.TemporaryRulesFormatter() - elif options.count_violations: - deps_checker.results_formatter = results.CountViolationsFormatter() - - if options.json: - deps_checker.results_formatter = results.JSONResultsFormatter( - options.json, deps_checker.results_formatter) - - deps_checker.CheckDirectory(start_dir) - return deps_checker.Report() - - -if '__main__' == __name__: - sys.exit(main()) diff --git a/chromium/tools/checkdeps/checkdeps_test.py b/chromium/tools/checkdeps/checkdeps_test.py deleted file mode 100755 index e8835a5ca8f..00000000000 --- a/chromium/tools/checkdeps/checkdeps_test.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Tests for checkdeps. -""" - -import os -import unittest - - -import checkdeps -import results - - -class CheckDepsTest(unittest.TestCase): - - def setUp(self): - self.deps_checker = checkdeps.DepsChecker(being_tested=True) - - def ImplTestRegularCheckDepsRun(self, ignore_temp_rules, skip_tests): - self.deps_checker._ignore_temp_rules = ignore_temp_rules - self.deps_checker._skip_tests = skip_tests - self.deps_checker.CheckDirectory( - os.path.join(self.deps_checker.base_directory, - 'tools/checkdeps/testdata')) - - problems = self.deps_checker.results_formatter.GetResults() - if skip_tests: - self.failUnlessEqual(3, len(problems)) - else: - self.failUnlessEqual(4, len(problems)) - - def VerifySubstringsInProblems(key_path, substrings_in_sequence): - """Finds the problem in |problems| that contains |key_path|, - then verifies that each of |substrings_in_sequence| occurs in - that problem, in the order they appear in - |substrings_in_sequence|. - """ - found = False - key_path = os.path.normpath(key_path) - for problem in problems: - index = problem.find(key_path) - if index != -1: - for substring in substrings_in_sequence: - index = problem.find(substring, index + 1) - self.failUnless(index != -1, '%s in %s' % (substring, problem)) - found = True - break - if not found: - self.fail('Found no problem for file %s' % key_path) - - if ignore_temp_rules: - VerifySubstringsInProblems('testdata/allowed/test.h', - ['-tools/checkdeps/testdata/disallowed', - 'temporarily_allowed.h', - '-third_party/explicitly_disallowed', - 'Because of no rule applying']) - else: - VerifySubstringsInProblems('testdata/allowed/test.h', - ['-tools/checkdeps/testdata/disallowed', - '-third_party/explicitly_disallowed', - 'Because of no rule applying']) - - VerifySubstringsInProblems('testdata/disallowed/test.h', - ['-third_party/explicitly_disallowed', - 'Because of no rule applying', - 'Because of no rule applying']) - VerifySubstringsInProblems('disallowed/allowed/test.h', - ['-third_party/explicitly_disallowed', - 'Because of no rule applying', - 'Because of no rule applying']) - - if not skip_tests: - VerifySubstringsInProblems('allowed/not_a_test.cc', - ['-tools/checkdeps/testdata/disallowed']) - - def testRegularCheckDepsRun(self): - self.ImplTestRegularCheckDepsRun(False, False) - - def testRegularCheckDepsRunIgnoringTempRules(self): - self.ImplTestRegularCheckDepsRun(True, False) - - def testRegularCheckDepsRunSkipTests(self): - self.ImplTestRegularCheckDepsRun(False, True) - - def testRegularCheckDepsRunIgnoringTempRulesSkipTests(self): - self.ImplTestRegularCheckDepsRun(True, True) - - def CountViolations(self, ignore_temp_rules): - self.deps_checker._ignore_temp_rules = ignore_temp_rules - self.deps_checker.results_formatter = results.CountViolationsFormatter() - self.deps_checker.CheckDirectory( - os.path.join(self.deps_checker.base_directory, - 'tools/checkdeps/testdata')) - return self.deps_checker.results_formatter.GetResults() - - def testCountViolations(self): - self.failUnlessEqual('10', self.CountViolations(False)) - - def testCountViolationsIgnoringTempRules(self): - self.failUnlessEqual('11', self.CountViolations(True)) - - def testTempRulesGenerator(self): - self.deps_checker.results_formatter = results.TemporaryRulesFormatter() - self.deps_checker.CheckDirectory( - os.path.join(self.deps_checker.base_directory, - 'tools/checkdeps/testdata/allowed')) - temp_rules = self.deps_checker.results_formatter.GetResults() - expected = [u' "!third_party/explicitly_disallowed/bad.h",', - u' "!third_party/no_rule/bad.h",', - u' "!tools/checkdeps/testdata/disallowed/bad.h",', - u' "!tools/checkdeps/testdata/disallowed/teststuff/bad.h",'] - self.failUnlessEqual(expected, temp_rules) - - def testCheckAddedIncludesAllGood(self): - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/allowed/test.cc', - ['#include "tools/checkdeps/testdata/allowed/good.h"', - '#include "tools/checkdeps/testdata/disallowed/allowed/good.h"'] - ]]) - self.failIf(problems) - - def testCheckAddedIncludesManyGarbageLines(self): - garbage_lines = ["My name is Sam%d\n" % num for num in range(50)] - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/allowed/test.cc', garbage_lines]]) - self.failIf(problems) - - def testCheckAddedIncludesNoRule(self): - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/allowed/test.cc', - ['#include "no_rule_for_this/nogood.h"'] - ]]) - self.failUnless(problems) - - def testCheckAddedIncludesSkippedDirectory(self): - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/disallowed/allowed/skipped/test.cc', - ['#include "whatever/whocares.h"'] - ]]) - self.failIf(problems) - - def testCheckAddedIncludesTempAllowed(self): - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/allowed/test.cc', - ['#include "tools/checkdeps/testdata/disallowed/temporarily_allowed.h"'] - ]]) - self.failUnless(problems) - - def testCopyIsDeep(self): - # Regression test for a bug where we were making shallow copies of - # Rules objects and therefore all Rules objects shared the same - # dictionary for specific rules. - # - # The first pair should bring in a rule from testdata/allowed/DEPS - # into that global dictionary that allows the - # temp_allowed_for_tests.h file to be included in files ending - # with _unittest.cc, and the second pair should completely fail - # once the bug is fixed, but succeed (with a temporary allowance) - # if the bug is in place. - problems = self.deps_checker.CheckAddedCppIncludes( - [['tools/checkdeps/testdata/allowed/test.cc', - ['#include "tools/checkdeps/testdata/disallowed/temporarily_allowed.h"'] - ], - ['tools/checkdeps/testdata/disallowed/foo_unittest.cc', - ['#include "tools/checkdeps/testdata/bongo/temp_allowed_for_tests.h"'] - ]]) - # With the bug in place, there would be two problems reported, and - # the second would be for foo_unittest.cc. - self.failUnless(len(problems) == 1) - self.failUnless(problems[0][0].endswith('/test.cc')) - - -if __name__ == '__main__': - unittest.main() diff --git a/chromium/tools/checkdeps/cpp_checker.py b/chromium/tools/checkdeps/cpp_checker.py deleted file mode 100644 index 9bcd14d75cc..00000000000 --- a/chromium/tools/checkdeps/cpp_checker.py +++ /dev/null @@ -1,113 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Checks C++ and Objective-C files for illegal includes.""" - -import codecs -import os -import re - -import results -from rules import Rule, MessageRule - - -class CppChecker(object): - - EXTENSIONS = [ - '.h', - '.cc', - '.cpp', - '.m', - '.mm', - ] - - # The maximum number of non-include lines we can see before giving up. - _MAX_UNINTERESTING_LINES = 50 - - # The maximum line length, this is to be efficient in the case of very long - # lines (which can't be #includes). - _MAX_LINE_LENGTH = 128 - - # This regular expression will be used to extract filenames from include - # statements. - _EXTRACT_INCLUDE_PATH = re.compile( - '[ \t]*#[ \t]*(?:include|import)[ \t]+"(.*)"') - - def __init__(self, verbose): - self._verbose = verbose - - def CheckLine(self, rules, line, dependee_path, fail_on_temp_allow=False): - """Checks the given line with the given rule set. - - Returns a tuple (is_include, dependency_violation) where - is_include is True only if the line is an #include or #import - statement, and dependency_violation is an instance of - results.DependencyViolation if the line violates a rule, or None - if it does not. - """ - found_item = self._EXTRACT_INCLUDE_PATH.match(line) - if not found_item: - return False, None # Not a match - - include_path = found_item.group(1) - - if '\\' in include_path: - return True, results.DependencyViolation( - include_path, - MessageRule('Include paths may not include backslashes.'), - rules) - - if '/' not in include_path: - # Don't fail when no directory is specified. We may want to be more - # strict about this in the future. - if self._verbose: - print ' WARNING: directory specified with no path: ' + include_path - return True, None - - rule = rules.RuleApplyingTo(include_path, dependee_path) - if (rule.allow == Rule.DISALLOW or - (fail_on_temp_allow and rule.allow == Rule.TEMP_ALLOW)): - return True, results.DependencyViolation(include_path, rule, rules) - return True, None - - def CheckFile(self, rules, filepath): - if self._verbose: - print 'Checking: ' + filepath - - dependee_status = results.DependeeStatus(filepath) - ret_val = '' # We'll collect the error messages in here - last_include = 0 - with codecs.open(filepath, encoding='utf-8') as f: - in_if0 = 0 - for line_num, line in enumerate(f): - if line_num - last_include > self._MAX_UNINTERESTING_LINES: - break - - line = line.strip() - - # Check to see if we're at / inside a #if 0 block - if line.startswith('#if 0'): - in_if0 += 1 - continue - if in_if0 > 0: - if line.startswith('#if'): - in_if0 += 1 - elif line.startswith('#endif'): - in_if0 -= 1 - continue - - is_include, violation = self.CheckLine(rules, line, filepath) - if is_include: - last_include = line_num - if violation: - dependee_status.AddViolation(violation) - - return dependee_status - - @staticmethod - def IsCppFile(file_path): - """Returns True iff the given path ends in one of the extensions - handled by this checker. - """ - return os.path.splitext(file_path)[1] in CppChecker.EXTENSIONS diff --git a/chromium/tools/checkdeps/graphdeps.py b/chromium/tools/checkdeps/graphdeps.py deleted file mode 100755 index c04af2399b8..00000000000 --- a/chromium/tools/checkdeps/graphdeps.py +++ /dev/null @@ -1,407 +0,0 @@ -#!/usr/bin/env python -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Dumps a graph of allowed and disallowed inter-module dependencies described -by the DEPS files in the source tree. Supports DOT and PNG as the output format. - -Enables filtering and differential highlighting of parts of the graph based on -the specified criteria. This allows for a much easier visual analysis of the -dependencies, including answering questions such as "if a new source must -depend on modules A, B, and C, what valid options among the existing modules -are there to put it in." - -See builddeps.py for a detailed description of the DEPS format. -""" - -import os -import optparse -import pipes -import re -import sys - -from builddeps import DepsBuilder -from rules import Rule - - -class DepsGrapher(DepsBuilder): - """Parses include_rules from DEPS files and outputs a DOT graph of the - allowed and disallowed dependencies between directories and specific file - regexps. Can generate only a subgraph of the whole dependency graph - corresponding to the provided inclusion and exclusion regexp filters. - Also can highlight fanins and/or fanouts of certain nodes matching the - provided regexp patterns. - """ - - def __init__(self, - base_directory, - verbose, - being_tested, - ignore_temp_rules, - ignore_specific_rules, - hide_disallowed_deps, - out_file, - out_format, - layout_engine, - unflatten_graph, - incl, - excl, - hilite_fanins, - hilite_fanouts): - """Creates a new DepsGrapher. - - Args: - base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src. - verbose: Set to true for debug output. - being_tested: Set to true to ignore the DEPS file at tools/graphdeps/DEPS. - ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!"). - ignore_specific_rules: Ignore rules from specific_include_rules sections. - hide_disallowed_deps: Hide disallowed dependencies from the output graph. - out_file: Output file name. - out_format: Output format (anything GraphViz dot's -T option supports). - layout_engine: Layout engine for formats other than 'dot' - (anything that GraphViz dot's -K option supports). - unflatten_graph: Try to reformat the output graph so it is narrower and - taller. Helps fight overly flat and wide graphs, but - sometimes produces a worse result. - incl: Include only nodes matching this regexp; such nodes' fanin/fanout - is also included. - excl: Exclude nodes matching this regexp; such nodes' fanin/fanout is - processed independently. - hilite_fanins: Highlight fanins of nodes matching this regexp with a - different edge and node color. - hilite_fanouts: Highlight fanouts of nodes matching this regexp with a - different edge and node color. - """ - DepsBuilder.__init__( - self, - base_directory, - verbose, - being_tested, - ignore_temp_rules, - ignore_specific_rules) - - self.ignore_temp_rules = ignore_temp_rules - self.ignore_specific_rules = ignore_specific_rules - self.hide_disallowed_deps = hide_disallowed_deps - self.out_file = out_file - self.out_format = out_format - self.layout_engine = layout_engine - self.unflatten_graph = unflatten_graph - self.incl = incl - self.excl = excl - self.hilite_fanins = hilite_fanins - self.hilite_fanouts = hilite_fanouts - - self.deps = set() - - def DumpDependencies(self): - """ Builds a dependency rule table and dumps the corresponding dependency - graph to all requested formats.""" - self._BuildDepsGraph(self.base_directory) - self._DumpDependencies() - - def _BuildDepsGraph(self, full_path): - """Recursively traverses the source tree starting at the specified directory - and builds a dependency graph representation in self.deps.""" - rel_path = os.path.relpath(full_path, self.base_directory) - #if re.search(self.incl, rel_path) and not re.search(self.excl, rel_path): - rules = self.GetDirectoryRules(full_path) - if rules: - deps = rules.AsDependencyTuples( - include_general_rules=True, - include_specific_rules=not self.ignore_specific_rules) - self.deps.update(deps) - - for item in os.listdir(full_path): - next_full_path = os.path.join(full_path, item) - if os.path.isdir(next_full_path): - self._BuildDepsGraph(next_full_path) - - def _DumpDependencies(self): - """Dumps the built dependency graph to the specified file with specified - format.""" - if self.out_format == 'dot' and not self.layout_engine: - if self.unflatten_graph: - pipe = pipes.Template() - pipe.append('unflatten -l 2 -c 3', '--') - out = pipe.open(self.out_file, 'w') - else: - out = open(self.out_file, 'w') - else: - pipe = pipes.Template() - if self.unflatten_graph: - pipe.append('unflatten -l 2 -c 3', '--') - dot_cmd = 'dot -T' + self.out_format - if self.layout_engine: - dot_cmd += ' -K' + self.layout_engine - pipe.append(dot_cmd, '--') - out = pipe.open(self.out_file, 'w') - - self._DumpDependenciesImpl(self.deps, out) - out.close() - - def _DumpDependenciesImpl(self, deps, out): - """Computes nodes' and edges' properties for the dependency graph |deps| and - carries out the actual dumping to a file/pipe |out|.""" - deps_graph = dict() - deps_srcs = set() - - # Pre-initialize the graph with src->(dst, allow) pairs. - for (allow, src, dst) in deps: - if allow == Rule.TEMP_ALLOW and self.ignore_temp_rules: - continue - - deps_srcs.add(src) - if src not in deps_graph: - deps_graph[src] = [] - deps_graph[src].append((dst, allow)) - - # Add all hierarchical parents too, in case some of them don't have their - # own DEPS, and therefore are missing from the list of rules. Those will - # be recursively populated with their parents' rules in the next block. - parent_src = os.path.dirname(src) - while parent_src: - if parent_src not in deps_graph: - deps_graph[parent_src] = [] - parent_src = os.path.dirname(parent_src) - - # For every node, propagate its rules down to all its children. - deps_srcs = list(deps_srcs) - deps_srcs.sort() - for src in deps_srcs: - parent_src = os.path.dirname(src) - if parent_src: - # We presort the list, so parents are guaranteed to precede children. - assert parent_src in deps_graph,\ - "src: %s, parent_src: %s" % (src, parent_src) - for (dst, allow) in deps_graph[parent_src]: - # Check that this node does not explicitly override a rule from the - # parent that we're about to add. - if ((dst, Rule.ALLOW) not in deps_graph[src]) and \ - ((dst, Rule.TEMP_ALLOW) not in deps_graph[src]) and \ - ((dst, Rule.DISALLOW) not in deps_graph[src]): - deps_graph[src].append((dst, allow)) - - node_props = {} - edges = [] - - # 1) Populate a list of edge specifications in DOT format; - # 2) Populate a list of computed raw node attributes to be output as node - # specifications in DOT format later on. - # Edges and nodes are emphasized with color and line/border weight depending - # on how many of incl/excl/hilite_fanins/hilite_fanouts filters they hit, - # and in what way. - for src in deps_graph.keys(): - for (dst, allow) in deps_graph[src]: - if allow == Rule.DISALLOW and self.hide_disallowed_deps: - continue - - if allow == Rule.ALLOW and src == dst: - continue - - edge_spec = "%s->%s" % (src, dst) - if not re.search(self.incl, edge_spec) or \ - re.search(self.excl, edge_spec): - continue - - if src not in node_props: - node_props[src] = {'hilite': None, 'degree': 0} - if dst not in node_props: - node_props[dst] = {'hilite': None, 'degree': 0} - - edge_weight = 1 - - if self.hilite_fanouts and re.search(self.hilite_fanouts, src): - node_props[src]['hilite'] = 'lightgreen' - node_props[dst]['hilite'] = 'lightblue' - node_props[dst]['degree'] += 1 - edge_weight += 1 - - if self.hilite_fanins and re.search(self.hilite_fanins, dst): - node_props[src]['hilite'] = 'lightblue' - node_props[dst]['hilite'] = 'lightgreen' - node_props[src]['degree'] += 1 - edge_weight += 1 - - if allow == Rule.ALLOW: - edge_color = (edge_weight > 1) and 'blue' or 'green' - edge_style = 'solid' - elif allow == Rule.TEMP_ALLOW: - edge_color = (edge_weight > 1) and 'blue' or 'green' - edge_style = 'dashed' - else: - edge_color = 'red' - edge_style = 'dashed' - edges.append(' "%s" -> "%s" [style=%s,color=%s,penwidth=%d];' % \ - (src, dst, edge_style, edge_color, edge_weight)) - - # Reformat the computed raw node attributes into a final DOT representation. - nodes = [] - for (node, attrs) in node_props.iteritems(): - attr_strs = [] - if attrs['hilite']: - attr_strs.append('style=filled,fillcolor=%s' % attrs['hilite']) - attr_strs.append('penwidth=%d' % (attrs['degree'] or 1)) - nodes.append(' "%s" [%s];' % (node, ','.join(attr_strs))) - - # Output nodes and edges to |out| (can be a file or a pipe). - edges.sort() - nodes.sort() - out.write('digraph DEPS {\n' - ' fontsize=8;\n') - out.write('\n'.join(nodes)) - out.write('\n\n') - out.write('\n'.join(edges)) - out.write('\n}\n') - out.close() - - -def PrintUsage(): - print """Usage: python graphdeps.py [--root ] - - --root ROOT Specifies the repository root. This defaults to "../../.." - relative to the script file. This will be correct given the - normal location of the script in "/tools/graphdeps". - - --(others) There are a few lesser-used options; run with --help to show them. - -Examples: - Dump the whole dependency graph: - graphdeps.py - Find a suitable place for a new source that must depend on /apps and - /content/browser/renderer_host. Limit potential candidates to /apps, - /chrome/browser and content/browser, and descendants of those three. - Generate both DOT and PNG output. The output will highlight the fanins - of /apps and /content/browser/renderer_host. Overlapping nodes in both fanins - will be emphasized by a thicker border. Those nodes are the ones that are - allowed to depend on both targets, therefore they are all legal candidates - to place the new source in: - graphdeps.py \ - --root=./src \ - --out=./DEPS.svg \ - --format=svg \ - --incl='^(apps|chrome/browser|content/browser)->.*' \ - --excl='.*->third_party' \ - --fanin='^(apps|content/browser/renderer_host)$' \ - --ignore-specific-rules \ - --ignore-temp-rules""" - - -def main(): - option_parser = optparse.OptionParser() - option_parser.add_option( - "", "--root", - default="", dest="base_directory", - help="Specifies the repository root. This defaults " - "to '../../..' relative to the script file, which " - "will normally be the repository root.") - option_parser.add_option( - "-f", "--format", - dest="out_format", default="dot", - help="Output file format. " - "Can be anything that GraphViz dot's -T option supports. " - "The most useful ones are: dot (text), svg (image), pdf (image)." - "NOTES: dotty has a known problem with fonts when displaying DOT " - "files on Ubuntu - if labels are unreadable, try other formats.") - option_parser.add_option( - "-o", "--out", - dest="out_file", default="DEPS", - help="Output file name. If the name does not end in an extension " - "matching the output format, that extension is automatically " - "appended.") - option_parser.add_option( - "-l", "--layout-engine", - dest="layout_engine", default="", - help="Layout rendering engine. " - "Can be anything that GraphViz dot's -K option supports. " - "The most useful are in decreasing order: dot, fdp, circo, osage. " - "NOTE: '-f dot' and '-f dot -l dot' are different: the former " - "will dump a raw DOT graph and stop; the latter will further " - "filter it through 'dot -Tdot -Kdot' layout engine.") - option_parser.add_option( - "-i", "--incl", - default="^.*$", dest="incl", - help="Include only edges of the graph that match the specified regexp. " - "The regexp is applied to edges of the graph formatted as " - "'source_node->target_node', where the '->' part is vebatim. " - "Therefore, a reliable regexp should look like " - "'^(chrome|chrome/browser|chrome/common)->content/public/browser$' " - "or similar, with both source and target node regexps present, " - "explicit ^ and $, and otherwise being as specific as possible.") - option_parser.add_option( - "-e", "--excl", - default="^$", dest="excl", - help="Exclude dependent nodes that match the specified regexp. " - "See --incl for details on the format.") - option_parser.add_option( - "", "--fanin", - default="", dest="hilite_fanins", - help="Highlight fanins of nodes matching the specified regexp.") - option_parser.add_option( - "", "--fanout", - default="", dest="hilite_fanouts", - help="Highlight fanouts of nodes matching the specified regexp.") - option_parser.add_option( - "", "--ignore-temp-rules", - action="store_true", dest="ignore_temp_rules", default=False, - help="Ignore !-prefixed (temporary) rules in DEPS files.") - option_parser.add_option( - "", "--ignore-specific-rules", - action="store_true", dest="ignore_specific_rules", default=False, - help="Ignore specific_include_rules section of DEPS files.") - option_parser.add_option( - "", "--hide-disallowed-deps", - action="store_true", dest="hide_disallowed_deps", default=False, - help="Hide disallowed dependencies in the output graph.") - option_parser.add_option( - "", "--unflatten", - action="store_true", dest="unflatten_graph", default=False, - help="Try to reformat the output graph so it is narrower and taller. " - "Helps fight overly flat and wide graphs, but sometimes produces " - "inferior results.") - option_parser.add_option( - "-v", "--verbose", - action="store_true", default=False, - help="Print debug logging") - options, args = option_parser.parse_args() - - if not options.out_file.endswith(options.out_format): - options.out_file += '.' + options.out_format - - deps_grapher = DepsGrapher( - base_directory=options.base_directory, - verbose=options.verbose, - being_tested=False, - - ignore_temp_rules=options.ignore_temp_rules, - ignore_specific_rules=options.ignore_specific_rules, - hide_disallowed_deps=options.hide_disallowed_deps, - - out_file=options.out_file, - out_format=options.out_format, - layout_engine=options.layout_engine, - unflatten_graph=options.unflatten_graph, - - incl=options.incl, - excl=options.excl, - hilite_fanins=options.hilite_fanins, - hilite_fanouts=options.hilite_fanouts) - - if len(args) > 0: - PrintUsage() - return 1 - - print 'Using base directory: ', deps_grapher.base_directory - print 'include nodes : ', options.incl - print 'exclude nodes : ', options.excl - print 'highlight fanins of : ', options.hilite_fanins - print 'highlight fanouts of: ', options.hilite_fanouts - - deps_grapher.DumpDependencies() - return 0 - - -if '__main__' == __name__: - sys.exit(main()) diff --git a/chromium/tools/checkdeps/java_checker.py b/chromium/tools/checkdeps/java_checker.py deleted file mode 100644 index 670eac21645..00000000000 --- a/chromium/tools/checkdeps/java_checker.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Checks Java files for illegal imports.""" - -import codecs -import os -import re - -import results -from rules import Rule - - -class JavaChecker(object): - """Import checker for Java files. - - The CheckFile method uses real filesystem paths, but Java imports work in - terms of package names. To deal with this, we have an extra "prescan" pass - that reads all the .java files and builds a mapping of class name -> filepath. - In CheckFile, we convert each import statement into a real filepath, and check - that against the rules in the DEPS files. - - Note that in Java you can always use classes in the same directory without an - explicit import statement, so these imports can't be blocked with DEPS files. - But that shouldn't be a problem, because same-package imports are pretty much - always correct by definition. (If we find a case where this is *not* correct, - it probably means the package is too big and needs to be split up.) - - Properties: - _classmap: dict of fully-qualified Java class name -> filepath - """ - - EXTENSIONS = ['.java'] - - def __init__(self, base_directory, verbose): - self._base_directory = base_directory - self._verbose = verbose - self._classmap = {} - self._PrescanFiles() - - def _PrescanFiles(self): - for root, dirs, files in os.walk(self._base_directory): - # Skip unwanted subdirectories. TODO(husky): it would be better to do - # this via the skip_child_includes flag in DEPS files. Maybe hoist this - # prescan logic into checkdeps.py itself? - for d in dirs: - # Skip hidden directories. - if d.startswith('.'): - dirs.remove(d) - # Skip the "out" directory, as dealing with generated files is awkward. - # We don't want paths like "out/Release/lib.java" in our DEPS files. - # TODO(husky): We need some way of determining the "real" path to - # a generated file -- i.e., where it would be in source control if - # it weren't generated. - if d == 'out': - dirs.remove(d) - # Skip third-party directories. - if d == 'third_party': - dirs.remove(d) - for f in files: - if f.endswith('.java'): - self._PrescanFile(os.path.join(root, f)) - - def _PrescanFile(self, filepath): - if self._verbose: - print 'Prescanning: ' + filepath - with codecs.open(filepath, encoding='utf-8') as f: - short_class_name, _ = os.path.splitext(os.path.basename(filepath)) - for line in f: - for package in re.findall('^package ([\w\.]+);', line): - full_class_name = package + '.' + short_class_name - if full_class_name in self._classmap: - print 'WARNING: multiple definitions of %s:' % full_class_name - print ' ' + filepath - print ' ' + self._classmap[full_class_name] - print - else: - self._classmap[full_class_name] = filepath - return - print 'WARNING: no package definition found in %s' % filepath - - def CheckFile(self, rules, filepath): - if self._verbose: - print 'Checking: ' + filepath - - dependee_status = results.DependeeStatus(filepath) - with codecs.open(filepath, encoding='utf-8') as f: - for line in f: - for clazz in re.findall('^import\s+(?:static\s+)?([\w\.]+)\s*;', line): - if clazz not in self._classmap: - # Importing a class from outside the Chromium tree. That's fine -- - # it's probably a Java or Android system class. - continue - include_path = os.path.relpath( - self._classmap[clazz], self._base_directory) - # Convert Windows paths to Unix style, as used in DEPS files. - include_path = include_path.replace(os.path.sep, '/') - rule = rules.RuleApplyingTo(include_path, filepath) - if rule.allow == Rule.DISALLOW: - dependee_status.AddViolation( - results.DependencyViolation(include_path, rule, rules)) - if '{' in line: - # This is code, so we're finished reading imports for this file. - break - - return dependee_status diff --git a/chromium/tools/checkdeps/results.py b/chromium/tools/checkdeps/results.py deleted file mode 100644 index b52880ccca3..00000000000 --- a/chromium/tools/checkdeps/results.py +++ /dev/null @@ -1,178 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - - -"""Results object and results formatters for checkdeps tool.""" - - -import json - - -class DependencyViolation(object): - """A single dependency violation.""" - - def __init__(self, include_path, violated_rule, rules): - # The include or import path that is in violation of a rule. - self.include_path = include_path - - # The violated rule. - self.violated_rule = violated_rule - - # The set of rules containing self.violated_rule. - self.rules = rules - - -class DependeeStatus(object): - """Results object for a dependee file.""" - - def __init__(self, dependee_path): - # Path of the file whose nonconforming dependencies are listed in - # self.violations. - self.dependee_path = dependee_path - - # List of DependencyViolation objects that apply to the dependee - # file. May be empty. - self.violations = [] - - def AddViolation(self, violation): - """Adds a violation.""" - self.violations.append(violation) - - def HasViolations(self): - """Returns True if this dependee is violating one or more rules.""" - return not not self.violations - - -class ResultsFormatter(object): - """Base class for results formatters.""" - - def AddError(self, dependee_status): - """Add a formatted result to |self.results| for |dependee_status|, - which is guaranteed to return True for - |dependee_status.HasViolations|. - """ - raise NotImplementedError() - - def GetResults(self): - """Returns the results. May be overridden e.g. to process the - results that have been accumulated. - """ - raise NotImplementedError() - - def PrintResults(self): - """Prints the results to stdout.""" - raise NotImplementedError() - - -class NormalResultsFormatter(ResultsFormatter): - """A results formatting object that produces the classical, - detailed, human-readable output of the checkdeps tool. - """ - - def __init__(self, verbose): - self.results = [] - self.verbose = verbose - - def AddError(self, dependee_status): - lines = [] - lines.append('\nERROR in %s' % dependee_status.dependee_path) - for violation in dependee_status.violations: - lines.append(self.FormatViolation(violation, self.verbose)) - self.results.append('\n'.join(lines)) - - @staticmethod - def FormatViolation(violation, verbose=False): - lines = [] - if verbose: - lines.append(' For %s' % violation.rules) - lines.append( - ' Illegal include: "%s"\n Because of %s' % - (violation.include_path, str(violation.violated_rule))) - return '\n'.join(lines) - - def GetResults(self): - return self.results - - def PrintResults(self): - for result in self.results: - print result - if self.results: - print '\nFAILED\n' - - -class JSONResultsFormatter(ResultsFormatter): - """A results formatter that outputs results to a file as JSON.""" - - def __init__(self, output_path, wrapped_formatter=None): - self.output_path = output_path - self.wrapped_formatter = wrapped_formatter - - self.results = [] - - def AddError(self, dependee_status): - self.results.append({ - 'dependee_path': dependee_status.dependee_path, - 'violations': [{ - 'include_path': violation.include_path, - 'violated_rule': violation.violated_rule.AsDependencyTuple(), - } for violation in dependee_status.violations] - }) - - if self.wrapped_formatter: - self.wrapped_formatter.AddError(dependee_status) - - def GetResults(self): - with open(self.output_path, 'w') as f: - f.write(json.dumps(self.results)) - - return self.results - - def PrintResults(self): - if self.wrapped_formatter: - self.wrapped_formatter.PrintResults() - return - - print self.results - - -class TemporaryRulesFormatter(ResultsFormatter): - """A results formatter that produces a single line per nonconforming - include. The combined output is suitable for directly pasting into a - DEPS file as a list of temporary-allow rules. - """ - - def __init__(self): - self.violations = set() - - def AddError(self, dependee_status): - for violation in dependee_status.violations: - self.violations.add(violation.include_path) - - def GetResults(self): - return [' "!%s",' % path for path in sorted(self.violations)] - - def PrintResults(self): - for result in self.GetResults(): - print result - - -class CountViolationsFormatter(ResultsFormatter): - """A results formatter that produces a number, the count of #include - statements that are in violation of the dependency rules. - - Note that you normally want to instantiate DepsChecker with - ignore_temp_rules=True when you use this formatter. - """ - - def __init__(self): - self.count = 0 - - def AddError(self, dependee_status): - self.count += len(dependee_status.violations) - - def GetResults(self): - return '%d' % self.count - - def PrintResults(self): - print self.count diff --git a/chromium/tools/checkdeps/rules.py b/chromium/tools/checkdeps/rules.py deleted file mode 100644 index b8a07df0050..00000000000 --- a/chromium/tools/checkdeps/rules.py +++ /dev/null @@ -1,178 +0,0 @@ -# Copyright 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Base classes to represent dependency rules, used by checkdeps.py""" - - -import os -import re - - -class Rule(object): - """Specifies a single rule for an include, which can be one of - ALLOW, DISALLOW and TEMP_ALLOW. - """ - - # These are the prefixes used to indicate each type of rule. These - # are also used as values for self.allow to indicate which type of - # rule this is. - ALLOW = '+' - DISALLOW = '-' - TEMP_ALLOW = '!' - - def __init__(self, allow, directory, dependent_directory, source): - self.allow = allow - self._dir = directory - self._dependent_dir = dependent_directory - self._source = source - - def __str__(self): - return '"%s%s" from %s.' % (self.allow, self._dir, self._source) - - def AsDependencyTuple(self): - """Returns a tuple (allow, dependent dir, dependee dir) for this rule, - which is fully self-sufficient to answer the question whether the dependent - is allowed to depend on the dependee, without knowing the external - context.""" - return (self.allow, self._dependent_dir or '.', self._dir or '.') - - def ParentOrMatch(self, other): - """Returns true if the input string is an exact match or is a parent - of the current rule. For example, the input "foo" would match "foo/bar".""" - return self._dir == other or self._dir.startswith(other + '/') - - def ChildOrMatch(self, other): - """Returns true if the input string would be covered by this rule. For - example, the input "foo/bar" would match the rule "foo".""" - return self._dir == other or other.startswith(self._dir + '/') - - -class MessageRule(Rule): - """A rule that has a simple message as the reason for failing, - unrelated to directory or source. - """ - - def __init__(self, reason): - super(MessageRule, self).__init__(Rule.DISALLOW, '', '', '') - self._reason = reason - - def __str__(self): - return self._reason - - -def ParseRuleString(rule_string, source): - """Returns a tuple of a character indicating what type of rule this - is, and a string holding the path the rule applies to. - """ - if not rule_string: - raise Exception('The rule string "%s" is empty\nin %s' % - (rule_string, source)) - - if not rule_string[0] in [Rule.ALLOW, Rule.DISALLOW, Rule.TEMP_ALLOW]: - raise Exception( - 'The rule string "%s" does not begin with a "+", "-" or "!".' % - rule_string) - - return (rule_string[0], rule_string[1:]) - - -class Rules(object): - """Sets of rules for files in a directory. - - By default, rules are added to the set of rules applicable to all - dependee files in the directory. Rules may also be added that apply - only to dependee files whose filename (last component of their path) - matches a given regular expression; hence there is one additional - set of rules per unique regular expression. - """ - - def __init__(self): - """Initializes the current rules with an empty rule list for all - files. - """ - # We keep the general rules out of the specific rules dictionary, - # as we need to always process them last. - self._general_rules = [] - - # Keys are regular expression strings, values are arrays of rules - # that apply to dependee files whose basename matches the regular - # expression. These are applied before the general rules, but - # their internal order is arbitrary. - self._specific_rules = {} - - def __str__(self): - result = ['Rules = {\n (apply to all files): [\n%s\n ],' % '\n'.join( - ' %s' % x for x in self._general_rules)] - for regexp, rules in self._specific_rules.iteritems(): - result.append(' (limited to files matching %s): [\n%s\n ]' % ( - regexp, '\n'.join(' %s' % x for x in rules))) - result.append(' }') - return '\n'.join(result) - - def AsDependencyTuples(self, include_general_rules, include_specific_rules): - """Returns a list of tuples (allow, dependent dir, dependee dir) for the - specified rules (general/specific). Currently only general rules are - supported.""" - def AddDependencyTuplesImpl(deps, rules, extra_dependent_suffix=""): - for rule in rules: - (allow, dependent, dependee) = rule.AsDependencyTuple() - tup = (allow, dependent + extra_dependent_suffix, dependee) - deps.add(tup) - - deps = set() - if include_general_rules: - AddDependencyTuplesImpl(deps, self._general_rules) - if include_specific_rules: - for regexp, rules in self._specific_rules.iteritems(): - AddDependencyTuplesImpl(deps, rules, "/" + regexp) - return deps - - def AddRule(self, rule_string, dependent_dir, source, dependee_regexp=None): - """Adds a rule for the given rule string. - - Args: - rule_string: The include_rule string read from the DEPS file to apply. - source: A string representing the location of that string (filename, etc.) - so that we can give meaningful errors. - dependent_dir: The directory to which this rule applies. - dependee_regexp: The rule will only be applied to dependee files - whose filename (last component of their path) - matches the expression. None to match all - dependee files. - """ - (rule_type, rule_dir) = ParseRuleString(rule_string, source) - - if not dependee_regexp: - rules_to_update = self._general_rules - else: - if dependee_regexp in self._specific_rules: - rules_to_update = self._specific_rules[dependee_regexp] - else: - rules_to_update = [] - - # Remove any existing rules or sub-rules that apply. For example, if we're - # passed "foo", we should remove "foo", "foo/bar", but not "foobar". - rules_to_update = [x for x in rules_to_update - if not x.ParentOrMatch(rule_dir)] - rules_to_update.insert(0, Rule(rule_type, rule_dir, dependent_dir, source)) - - if not dependee_regexp: - self._general_rules = rules_to_update - else: - self._specific_rules[dependee_regexp] = rules_to_update - - def RuleApplyingTo(self, include_path, dependee_path): - """Returns the rule that applies to |include_path| for a dependee - file located at |dependee_path|. - """ - dependee_filename = os.path.basename(dependee_path) - for regexp, specific_rules in self._specific_rules.iteritems(): - if re.match(regexp, dependee_filename): - for rule in specific_rules: - if rule.ChildOrMatch(include_path): - return rule - for rule in self._general_rules: - if rule.ChildOrMatch(include_path): - return rule - return MessageRule('no rule applying.') diff --git a/chromium/tools/checklicenses/OWNERS b/chromium/tools/checklicenses/OWNERS deleted file mode 100644 index 2abfa66e8a9..00000000000 --- a/chromium/tools/checklicenses/OWNERS +++ /dev/null @@ -1,3 +0,0 @@ -set noparent -phajdan.jr@chromium.org -thestig@chromium.org diff --git a/chromium/tools/checklicenses/checklicenses.py b/chromium/tools/checklicenses/checklicenses.py deleted file mode 100755 index b1cc0a73af6..00000000000 --- a/chromium/tools/checklicenses/checklicenses.py +++ /dev/null @@ -1,506 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Makes sure that all files contain proper licensing information.""" - - -import optparse -import os.path -import subprocess -import sys - - -def PrintUsage(): - print """Usage: python checklicenses.py [--root ] [tocheck] - --root Specifies the repository root. This defaults to "../.." relative - to the script file. This will be correct given the normal location - of the script in "/tools/checklicenses". - - --ignore-suppressions Ignores path-specific license whitelist. Useful when - trying to remove a suppression/whitelist entry. - - tocheck Specifies the directory, relative to root, to check. This defaults - to "." so it checks everything. - -Examples: - python checklicenses.py - python checklicenses.py --root ~/chromium/src third_party""" - - -WHITELISTED_LICENSES = [ - 'Apache (v2.0)', - 'Apache (v2.0) BSD (2 clause)', - 'Apache (v2.0) GPL (v2)', - 'Apple MIT', # https://fedoraproject.org/wiki/Licensing/Apple_MIT_License - 'APSL (v2)', - 'APSL (v2) BSD (4 clause)', - 'BSD', - 'BSD (2 clause)', - 'BSD (2 clause) ISC', - 'BSD (2 clause) MIT/X11 (BSD like)', - 'BSD (3 clause)', - 'BSD (3 clause) GPL (v2)', - 'BSD (3 clause) ISC', - 'BSD (3 clause) LGPL (v2 or later)', - 'BSD (3 clause) LGPL (v2.1 or later)', - 'BSD (3 clause) MIT/X11 (BSD like)', - 'BSD (4 clause)', - 'BSD-like', - - # TODO(phajdan.jr): Make licensecheck not print BSD-like twice. - 'BSD-like MIT/X11 (BSD like)', - - 'BSL (v1.0)', - 'GPL (v2) LGPL (v2.1 or later)', - 'GPL (v2 or later) with Bison parser exception', - 'GPL (v2 or later) with libtool exception', - 'GPL (v3 or later) with Bison parser exception', - 'GPL with Bison parser exception', - 'ISC', - 'LGPL (unversioned/unknown version)', - 'LGPL (v2)', - 'LGPL (v2 or later)', - 'LGPL (v2.1)', - 'LGPL (v2.1 or later)', - 'LGPL (v3 or later)', - 'MIT/X11 (BSD like)', - 'MIT/X11 (BSD like) LGPL (v2.1 or later)', - 'MPL (v1.0) LGPL (v2 or later)', - 'MPL (v1.1)', - 'MPL (v1.1) BSD (3 clause) GPL (v2) LGPL (v2.1 or later)', - 'MPL (v1.1) BSD (3 clause) LGPL (v2.1 or later)', - 'MPL (v1.1) BSD-like', - 'MPL (v1.1) BSD-like GPL (unversioned/unknown version)', - 'MPL (v1.1) BSD-like GPL (v2) LGPL (v2.1 or later)', - 'MPL (v1.1) GPL (v2)', - 'MPL (v1.1) GPL (v2) LGPL (v2 or later)', - 'MPL (v1.1) GPL (v2) LGPL (v2.1 or later)', - 'MPL (v1.1) GPL (unversioned/unknown version)', - 'MPL (v1.1) LGPL (v2 or later)', - 'MPL (v1.1) LGPL (v2.1 or later)', - 'MPL (v2.0)', - 'Ms-PL', - 'Public domain', - 'Public domain BSD', - 'Public domain BSD (3 clause)', - 'Public domain BSD-like', - 'Public domain LGPL (v2.1 or later)', - 'libpng', - 'zlib/libpng', - 'SGI Free Software License B', - 'University of Illinois/NCSA Open Source License (BSD like)', -] - - -PATH_SPECIFIC_WHITELISTED_LICENSES = { - 'base/hash.cc': [ # http://crbug.com/98100 - 'UNKNOWN', - ], - 'base/third_party/icu': [ # http://crbug.com/98087 - 'UNKNOWN', - ], - - # http://code.google.com/p/google-breakpad/issues/detail?id=450 - 'breakpad/src': [ - 'UNKNOWN', - ], - - 'chrome/common/extensions/docs/examples': [ # http://crbug.com/98092 - 'UNKNOWN', - ], - 'chrome/test/data/gpu/vt': [ - 'UNKNOWN', - ], - 'courgette/third_party/bsdiff_create.cc': [ # http://crbug.com/98095 - 'UNKNOWN', - ], - 'data/tab_switching': [ - 'UNKNOWN', - ], - 'native_client': [ # http://crbug.com/98099 - 'UNKNOWN', - ], - 'native_client/toolchain': [ - 'BSD GPL (v2 or later)', - 'BSD (2 clause) GPL (v2 or later)', - 'BSD (3 clause) GPL (v2 or later)', - 'BSL (v1.0) GPL', - 'BSL (v1.0) GPL (v3.1)', - 'GPL', - 'GPL (unversioned/unknown version)', - 'GPL (v2)', - 'GPL (v2 or later)', - 'GPL (v3.1)', - 'GPL (v3 or later)', - ], - 'net/tools/spdyshark': [ - 'GPL (v2 or later)', - 'UNKNOWN', - ], - 'third_party/WebKit': [ - 'UNKNOWN', - ], - 'third_party/active_doc': [ # http://crbug.com/98113 - 'UNKNOWN', - ], - - # http://code.google.com/p/angleproject/issues/detail?id=217 - 'third_party/angle': [ - 'UNKNOWN', - ], - - # http://crbug.com/222828 - # http://bugs.python.org/issue17514 - 'third_party/chromite/third_party/argparse.py': [ - 'UNKNOWN', - ], - - # http://crbug.com/326117 - # https://bitbucket.org/chrisatlee/poster/issue/21 - 'third_party/chromite/third_party/poster': [ - 'UNKNOWN', - ], - - # Not used. http://crbug.com/156020 - # Using third_party/cros_dbus_cplusplus/cros_dbus_cplusplus.gyp instead. - 'third_party/cros_dbus_cplusplus/source/autogen.sh': [ - 'UNKNOWN', - ], - # Included in the source tree but not built. http://crbug.com/156020 - 'third_party/cros_dbus_cplusplus/source/examples': [ - 'UNKNOWN', - ], - 'third_party/devscripts': [ - 'GPL (v2 or later)', - ], - 'third_party/expat/files/lib': [ # http://crbug.com/98121 - 'UNKNOWN', - ], - 'third_party/ffmpeg': [ - 'GPL', - 'GPL (v2)', - 'GPL (v2 or later)', - 'UNKNOWN', # http://crbug.com/98123 - ], - 'third_party/freetype2': [ # http://crbug.com/177319 - 'UNKNOWN', - ], - 'third_party/gles2_conform/GTF_ES': [ # http://crbug.com/98131 - 'UNKNOWN', - ], - 'third_party/hunspell': [ # http://crbug.com/98134 - 'UNKNOWN', - ], - 'third_party/iccjpeg': [ # http://crbug.com/98137 - 'UNKNOWN', - ], - 'third_party/icu': [ # http://crbug.com/98301 - 'UNKNOWN', - ], - 'third_party/jemalloc': [ # http://crbug.com/98302 - 'UNKNOWN', - ], - 'third_party/JSON': [ - 'Perl', # Build-only. - # License missing upstream on 3 minor files. - 'UNKNOWN', # https://rt.cpan.org/Public/Bug/Display.html?id=85915 - ], - 'third_party/lcov': [ # http://crbug.com/98304 - 'UNKNOWN', - ], - 'third_party/lcov/contrib/galaxy/genflat.pl': [ - 'GPL (v2 or later)', - ], - 'third_party/libevent': [ # http://crbug.com/98309 - 'UNKNOWN', - ], - 'third_party/libjingle/source/talk': [ # http://crbug.com/98310 - 'UNKNOWN', - ], - 'third_party/libjpeg': [ # http://crbug.com/98313 - 'UNKNOWN', - ], - 'third_party/libjpeg_turbo': [ # http://crbug.com/98314 - 'UNKNOWN', - ], - 'third_party/libpng': [ # http://crbug.com/98318 - 'UNKNOWN', - ], - - # The following files lack license headers, but are trivial. - 'third_party/libusb/src/libusb/os/poll_posix.h': [ - 'UNKNOWN', - ], - - 'third_party/libvpx/source': [ # http://crbug.com/98319 - 'UNKNOWN', - ], - 'third_party/libvpx/source/libvpx/examples/includes': [ - 'GPL (v2 or later)', - ], - 'third_party/libxml': [ - 'UNKNOWN', - ], - 'third_party/libxslt': [ - 'UNKNOWN', - ], - 'third_party/lzma_sdk': [ - 'UNKNOWN', - ], - 'third_party/mesa/src': [ - 'GPL (v2)', - 'GPL (v3 or later)', - 'MIT/X11 (BSD like) GPL (v3 or later) with Bison parser exception', - 'UNKNOWN', # http://crbug.com/98450 - ], - 'third_party/modp_b64': [ - 'UNKNOWN', - ], - 'third_party/openmax_dl/dl' : [ - 'Khronos Group', - ], - 'third_party/openssl': [ # http://crbug.com/98451 - 'UNKNOWN', - ], - 'third_party/ots/tools/ttf-checksum.py': [ # http://code.google.com/p/ots/issues/detail?id=2 - 'UNKNOWN', - ], - 'third_party/molokocacao': [ # http://crbug.com/98453 - 'UNKNOWN', - ], - 'third_party/npapi/npspy': [ - 'UNKNOWN', - ], - 'third_party/ocmock/OCMock': [ # http://crbug.com/98454 - 'UNKNOWN', - ], - 'third_party/ply/__init__.py': [ - 'UNKNOWN', - ], - 'third_party/protobuf': [ # http://crbug.com/98455 - 'UNKNOWN', - ], - - # http://crbug.com/222831 - # https://bitbucket.org/eliben/pyelftools/issue/12 - 'third_party/pyelftools': [ - 'UNKNOWN', - ], - - 'third_party/scons-2.0.1/engine/SCons': [ # http://crbug.com/98462 - 'UNKNOWN', - ], - 'third_party/simplejson': [ - 'UNKNOWN', - ], - 'third_party/skia': [ # http://crbug.com/98463 - 'UNKNOWN', - ], - 'third_party/snappy/src': [ # http://crbug.com/98464 - 'UNKNOWN', - ], - 'third_party/smhasher/src': [ # http://crbug.com/98465 - 'UNKNOWN', - ], - 'third_party/speech-dispatcher/libspeechd.h': [ - 'GPL (v2 or later)', - ], - 'third_party/sqlite': [ - 'UNKNOWN', - ], - - # https://code.google.com/p/colorama/issues/detail?id=44 - 'tools/swarming_client/third_party/colorama': [ - 'UNKNOWN', - ], - - # https://github.com/kennethreitz/requests/issues/1610 - 'tools/swarming_client/third_party/requests': [ - 'UNKNOWN', - ], - - 'third_party/swig/Lib/linkruntime.c': [ # http://crbug.com/98585 - 'UNKNOWN', - ], - 'third_party/talloc': [ - 'GPL (v3 or later)', - 'UNKNOWN', # http://crbug.com/98588 - ], - 'third_party/tcmalloc': [ - 'UNKNOWN', # http://crbug.com/98589 - ], - 'third_party/tlslite': [ - 'UNKNOWN', - ], - 'third_party/webdriver': [ # http://crbug.com/98590 - 'UNKNOWN', - ], - - # https://github.com/html5lib/html5lib-python/issues/125 - # https://github.com/KhronosGroup/WebGL/issues/435 - 'third_party/webgl/src': [ - 'UNKNOWN', - ], - - 'third_party/webrtc': [ # http://crbug.com/98592 - 'UNKNOWN', - ], - 'third_party/xdg-utils': [ # http://crbug.com/98593 - 'UNKNOWN', - ], - 'third_party/yasm/source': [ # http://crbug.com/98594 - 'UNKNOWN', - ], - 'third_party/zlib/contrib/minizip': [ - 'UNKNOWN', - ], - 'third_party/zlib/trees.h': [ - 'UNKNOWN', - ], - 'tools/emacs': [ # http://crbug.com/98595 - 'UNKNOWN', - ], - 'tools/gyp/test': [ - 'UNKNOWN', - ], - 'tools/histograms': [ - 'UNKNOWN', - ], - 'tools/python/google/__init__.py': [ - 'UNKNOWN', - ], - 'tools/stats_viewer/Properties/AssemblyInfo.cs': [ - 'UNKNOWN', - ], - 'tools/symsrc/pefile.py': [ - 'UNKNOWN', - ], - 'v8/test/cctest': [ # http://crbug.com/98597 - 'UNKNOWN', - ], -} - - -def check_licenses(options, args): - # Figure out which directory we have to check. - if len(args) == 0: - # No directory to check specified, use the repository root. - start_dir = options.base_directory - elif len(args) == 1: - # Directory specified. Start here. It's supposed to be relative to the - # base directory. - start_dir = os.path.abspath(os.path.join(options.base_directory, args[0])) - else: - # More than one argument, we don't handle this. - PrintUsage() - return 1 - - print "Using base directory:", options.base_directory - print "Checking:", start_dir - print - - licensecheck_path = os.path.abspath(os.path.join(options.base_directory, - 'third_party', - 'devscripts', - 'licensecheck.pl')) - - licensecheck = subprocess.Popen([licensecheck_path, - '-l', '100', - '-r', start_dir], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - stdout, stderr = licensecheck.communicate() - if options.verbose: - print '----------- licensecheck stdout -----------' - print stdout - print '--------- end licensecheck stdout ---------' - if licensecheck.returncode != 0 or stderr: - print '----------- licensecheck stderr -----------' - print stderr - print '--------- end licensecheck stderr ---------' - print "\nFAILED\n" - return 1 - - used_suppressions = set() - - success = True - for line in stdout.splitlines(): - filename, license = line.split(':', 1) - filename = os.path.relpath(filename.strip(), options.base_directory) - - # All files in the build output directory are generated one way or another. - # There's no need to check them. - if filename.startswith('out/'): - continue - - # For now we're just interested in the license. - license = license.replace('*No copyright*', '').strip() - - # Skip generated files. - if 'GENERATED FILE' in license: - continue - - if license in WHITELISTED_LICENSES: - continue - - if not options.ignore_suppressions: - matched_prefixes = [ - prefix for prefix in PATH_SPECIFIC_WHITELISTED_LICENSES - if filename.startswith(prefix) and - license in PATH_SPECIFIC_WHITELISTED_LICENSES[prefix]] - if matched_prefixes: - used_suppressions.update(set(matched_prefixes)) - continue - - print "'%s' has non-whitelisted license '%s'" % (filename, license) - success = False - - if success: - print "\nSUCCESS\n" - - unused_suppressions = set( - PATH_SPECIFIC_WHITELISTED_LICENSES.keys()).difference(used_suppressions) - if unused_suppressions: - print "\nNOTE: unused suppressions detected:\n" - print '\n'.join(unused_suppressions) - - return 0 - else: - print "\nFAILED\n" - print "Please read", - print "http://www.chromium.org/developers/adding-3rd-party-libraries" - print "for more info how to handle the failure." - print - print "Please respect OWNERS of checklicenses.py. Changes violating" - print "this requirement may be reverted." - - # Do not print unused suppressions so that above message is clearly - # visible and gets proper attention. Too much unrelated output - # would be distracting and make the important points easier to miss. - - return 1 - - -def main(): - default_root = os.path.abspath( - os.path.join(os.path.dirname(__file__), '..', '..')) - option_parser = optparse.OptionParser() - option_parser.add_option('--root', default=default_root, - dest='base_directory', - help='Specifies the repository root. This defaults ' - 'to "../.." relative to the script file, which ' - 'will normally be the repository root.') - option_parser.add_option('-v', '--verbose', action='store_true', - default=False, help='Print debug logging') - option_parser.add_option('--ignore-suppressions', - action='store_true', - default=False, - help='Ignore path-specific license whitelist.') - options, args = option_parser.parse_args() - return check_licenses(options, args) - - -if '__main__' == __name__: - sys.exit(main()) diff --git a/chromium/tools/checkperms/OWNERS b/chromium/tools/checkperms/OWNERS deleted file mode 100644 index 1967bf567e8..00000000000 --- a/chromium/tools/checkperms/OWNERS +++ /dev/null @@ -1 +0,0 @@ -thestig@chromium.org diff --git a/chromium/tools/checkperms/PRESUBMIT.py b/chromium/tools/checkperms/PRESUBMIT.py deleted file mode 100644 index c2f93567da3..00000000000 --- a/chromium/tools/checkperms/PRESUBMIT.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Top-level presubmit script for checkperms. - -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for -details on the presubmit API built into gcl. -""" - - -def CommonChecks(input_api, output_api): - output = [] - output.extend(input_api.canned_checks.RunPylint(input_api, output_api)) - # Run it like if it were a unit test. - output.extend( - input_api.canned_checks.RunUnitTests( - input_api, output_api, ['./checkperms.py'])) - return output - - -def CheckChangeOnUpload(input_api, output_api): - return CommonChecks(input_api, output_api) - - -def CheckChangeOnCommit(input_api, output_api): - return CommonChecks(input_api, output_api) diff --git a/chromium/tools/checkperms/checkperms.py b/chromium/tools/checkperms/checkperms.py deleted file mode 100755 index 9395c00d276..00000000000 --- a/chromium/tools/checkperms/checkperms.py +++ /dev/null @@ -1,544 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Makes sure files have the right permissions. - -Some developers have broken SCM configurations that flip the svn:executable -permission on for no good reason. Unix developers who run ls --color will then -see .cc files in green and get confused. - -- For file extensions that must be executable, add it to EXECUTABLE_EXTENSIONS. -- For file extensions that must not be executable, add it to - NOT_EXECUTABLE_EXTENSIONS. -- To ignore all the files inside a directory, add it to IGNORED_PATHS. -- For file base name with ambiguous state and that should not be checked for - shebang, add it to IGNORED_FILENAMES. - -Any file not matching the above will be opened and looked if it has a shebang -or an ELF header. If this does not match the executable bit on the file, the -file will be flagged. - -Note that all directory separators must be slashes (Unix-style) and not -backslashes. All directories should be relative to the source root and all -file paths should be only lowercase. -""" - -import logging -import optparse -import os -import stat -import string -import subprocess -import sys - -#### USER EDITABLE SECTION STARTS HERE #### - -# Files with these extensions must have executable bit set. -# -# Case-sensitive. -EXECUTABLE_EXTENSIONS = ( - 'bat', - 'dll', - 'dylib', - 'exe', -) - -# These files must have executable bit set. -# -# Case-insensitive, lower-case only. -EXECUTABLE_PATHS = ( - 'chrome/test/data/extensions/uitest/plugins/plugin.plugin/contents/' - 'macos/testnetscapeplugin', - 'chrome/test/data/extensions/uitest/plugins_private/plugin.plugin/contents/' - 'macos/testnetscapeplugin', -) - -# These files must not have the executable bit set. This is mainly a performance -# optimization as these files are not checked for shebang. The list was -# partially generated from: -# git ls-files | grep "\\." | sed 's/.*\.//' | sort | uniq -c | sort -b -g -# -# Case-sensitive. -NON_EXECUTABLE_EXTENSIONS = ( - '1', - '3ds', - 'S', - 'am', - 'applescript', - 'asm', - 'c', - 'cc', - 'cfg', - 'chromium', - 'cpp', - 'crx', - 'cs', - 'css', - 'cur', - 'def', - 'der', - 'expected', - 'gif', - 'grd', - 'gyp', - 'gypi', - 'h', - 'hh', - 'htm', - 'html', - 'hyph', - 'ico', - 'idl', - 'java', - 'jpg', - 'js', - 'json', - 'm', - 'm4', - 'mm', - 'mms', - 'mock-http-headers', - 'nexe', - 'nmf', - 'onc', - 'pat', - 'patch', - 'pdf', - 'pem', - 'plist', - 'png', - 'proto', - 'rc', - 'rfx', - 'rgs', - 'rules', - 'spec', - 'sql', - 'srpc', - 'svg', - 'tcl', - 'test', - 'tga', - 'txt', - 'vcproj', - 'vsprops', - 'webm', - 'word', - 'xib', - 'xml', - 'xtb', - 'zip', -) - -# These files must not have executable bit set. -# -# Case-insensitive, lower-case only. -NON_EXECUTABLE_PATHS = ( - 'build/android/tests/symbolize/liba.so', - 'build/android/tests/symbolize/libb.so', - 'chrome/installer/mac/sign_app.sh.in', - 'chrome/installer/mac/sign_versioned_dir.sh.in', - 'chrome/test/data/components/ihfokbkgjpifnbbojhneepfflplebdkc/' - 'ihfokbkgjpifnbbojhneepfflplebdkc_1/a_changing_binary_file', - 'chrome/test/data/components/ihfokbkgjpifnbbojhneepfflplebdkc/' - 'ihfokbkgjpifnbbojhneepfflplebdkc_2/a_changing_binary_file', - 'chrome/test/data/extensions/uitest/plugins/plugin32.so', - 'chrome/test/data/extensions/uitest/plugins/plugin64.so', - 'chrome/test/data/extensions/uitest/plugins_private/plugin32.so', - 'chrome/test/data/extensions/uitest/plugins_private/plugin64.so', - 'courgette/testdata/elf-32-1', - 'courgette/testdata/elf-32-2', - 'courgette/testdata/elf-64', -) - -# File names that are always whitelisted. (These are mostly autoconf spew.) -# -# Case-sensitive. -IGNORED_FILENAMES = ( - 'config.guess', - 'config.sub', - 'configure', - 'depcomp', - 'install-sh', - 'missing', - 'mkinstalldirs', - 'naclsdk', - 'scons', -) - -# File paths starting with one of these will be ignored as well. -# Please consider fixing your file permissions, rather than adding to this list. -# -# Case-insensitive, lower-case only. -IGNORED_PATHS = ( - 'native_client_sdk/src/build_tools/sdk_tools/third_party/fancy_urllib/' - '__init__.py', - 'out/', - # TODO(maruel): Fix these. - 'third_party/android_testrunner/', - 'third_party/bintrees/', - 'third_party/closure_linter/', - 'third_party/devscripts/licensecheck.pl.vanilla', - 'third_party/hyphen/', - 'third_party/jemalloc/', - 'third_party/lcov-1.9/contrib/galaxy/conglomerate_functions.pl', - 'third_party/lcov-1.9/contrib/galaxy/gen_makefile.sh', - 'third_party/lcov/contrib/galaxy/conglomerate_functions.pl', - 'third_party/lcov/contrib/galaxy/gen_makefile.sh', - 'third_party/libevent/autogen.sh', - 'third_party/libevent/test/test.sh', - 'third_party/libxml/linux/xml2-config', - 'third_party/libxml/src/ltmain.sh', - 'third_party/mesa/', - 'third_party/protobuf/', - 'third_party/python_gflags/gflags.py', - 'third_party/sqlite/', - 'third_party/talloc/script/mksyms.sh', - 'third_party/tcmalloc/', - 'third_party/tlslite/setup.py', -) - -#### USER EDITABLE SECTION ENDS HERE #### - -assert set(EXECUTABLE_EXTENSIONS) & set(NON_EXECUTABLE_EXTENSIONS) == set() -assert set(EXECUTABLE_PATHS) & set(NON_EXECUTABLE_PATHS) == set() - -VALID_CHARS = set(string.ascii_lowercase + string.digits + '/-_.') -for paths in (EXECUTABLE_PATHS, NON_EXECUTABLE_PATHS, IGNORED_PATHS): - assert all([set(path).issubset(VALID_CHARS) for path in paths]) - - -def capture(cmd, cwd): - """Returns the output of a command. - - Ignores the error code or stderr. - """ - logging.debug('%s; cwd=%s' % (' '.join(cmd), cwd)) - env = os.environ.copy() - env['LANGUAGE'] = 'en_US.UTF-8' - p = subprocess.Popen( - cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd, env=env) - return p.communicate()[0] - - -def get_svn_info(dir_path): - """Returns svn meta-data for a svn checkout.""" - if not os.path.isdir(dir_path): - return {} - out = capture(['svn', 'info', '.', '--non-interactive'], dir_path) - return dict(l.split(': ', 1) for l in out.splitlines() if l) - - -def get_svn_url(dir_path): - return get_svn_info(dir_path).get('URL') - - -def get_svn_root(dir_path): - """Returns the svn checkout root or None.""" - svn_url = get_svn_url(dir_path) - if not svn_url: - return None - logging.info('svn url: %s' % svn_url) - while True: - parent = os.path.dirname(dir_path) - if parent == dir_path: - return None - svn_url = svn_url.rsplit('/', 1)[0] - if svn_url != get_svn_url(parent): - return dir_path - dir_path = parent - - -def get_git_root(dir_path): - """Returns the git checkout root or None.""" - root = capture(['git', 'rev-parse', '--show-toplevel'], dir_path).strip() - if root: - return root - - -def is_ignored(rel_path): - """Returns True if rel_path is in our whitelist of files to ignore.""" - rel_path = rel_path.lower() - return ( - os.path.basename(rel_path) in IGNORED_FILENAMES or - rel_path.lower().startswith(IGNORED_PATHS)) - - -def must_be_executable(rel_path): - """The file name represents a file type that must have the executable bit - set. - """ - return (os.path.splitext(rel_path)[1][1:] in EXECUTABLE_EXTENSIONS or - rel_path.lower() in EXECUTABLE_PATHS) - - -def must_not_be_executable(rel_path): - """The file name represents a file type that must not have the executable - bit set. - """ - return (os.path.splitext(rel_path)[1][1:] in NON_EXECUTABLE_EXTENSIONS or - rel_path.lower() in NON_EXECUTABLE_PATHS) - - -def has_executable_bit(full_path): - """Returns if any executable bit is set.""" - permission = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH - return bool(permission & os.stat(full_path).st_mode) - - -def has_shebang_or_is_elf(full_path): - """Returns if the file starts with #!/ or is an ELF binary. - - full_path is the absolute path to the file. - """ - with open(full_path, 'rb') as f: - data = f.read(4) - return (data[:3] == '#!/', data == '\x7fELF') - - -def check_file(root_path, rel_path, bare_output): - """Checks the permissions of the file whose path is root_path + rel_path and - returns an error if it is inconsistent. - - It is assumed that the file is not ignored by is_ignored(). - - If the file name is matched with must_be_executable() or - must_not_be_executable(), only its executable bit is checked. - Otherwise, the first few bytes of the file are read to verify if it has a - shebang or ELF header and compares this with the executable bit on the file. - """ - full_path = os.path.join(root_path, rel_path) - try: - bit = has_executable_bit(full_path) - except OSError: - # It's faster to catch exception than call os.path.islink(). Chromium - # tree happens to have invalid symlinks under - # third_party/openssl/openssl/test/. - return None - - if must_be_executable(rel_path): - if not bit: - if bare_output: - return full_path - return '%s: Must have executable bit set' % full_path - return - if must_not_be_executable(rel_path): - if bit: - if bare_output: - return full_path - return '%s: Must not have executable bit set' % full_path - return - - # For the others, it depends on the file header. - (shebang, elf) = has_shebang_or_is_elf(full_path) - if bit != (shebang or elf): - if bare_output: - return full_path - if bit: - return '%s: Has executable bit but not shebang or ELF header' % full_path - if shebang: - return '%s: Has shebang but not executable bit' % full_path - return '%s: Has ELF header but not executable bit' % full_path - - -def check_files(root, files, bare_output): - errors = [] - for rel_path in files: - if is_ignored(rel_path): - continue - - error = check_file(root, rel_path, bare_output) - if error: - errors.append(error) - - return errors - - -class ApiBase(object): - def __init__(self, root_dir, bare_output): - self.root_dir = root_dir - self.bare_output = bare_output - self.count = 0 - self.count_read_header = 0 - - def check_file(self, rel_path): - logging.debug('check_file(%s)' % rel_path) - self.count += 1 - - if (not must_be_executable(rel_path) and - not must_not_be_executable(rel_path)): - self.count_read_header += 1 - - return check_file(self.root_dir, rel_path, self.bare_output) - - def check_dir(self, rel_path): - return self.check(rel_path) - - def check(self, start_dir): - """Check the files in start_dir, recursively check its subdirectories.""" - errors = [] - items = self.list_dir(start_dir) - logging.info('check(%s) -> %d' % (start_dir, len(items))) - for item in items: - full_path = os.path.join(self.root_dir, start_dir, item) - rel_path = full_path[len(self.root_dir) + 1:] - if is_ignored(rel_path): - continue - if os.path.isdir(full_path): - # Depth first. - errors.extend(self.check_dir(rel_path)) - else: - error = self.check_file(rel_path) - if error: - errors.append(error) - return errors - - def list_dir(self, start_dir): - """Lists all the files and directory inside start_dir.""" - return sorted( - x for x in os.listdir(os.path.join(self.root_dir, start_dir)) - if not x.startswith('.') - ) - - -class ApiSvnQuick(ApiBase): - """Returns all files in svn-versioned directories, independent of the fact if - they are versionned. - - Uses svn info in each directory to determine which directories should be - crawled. - """ - def __init__(self, *args): - super(ApiSvnQuick, self).__init__(*args) - self.url = get_svn_url(self.root_dir) - - def check_dir(self, rel_path): - url = self.url + '/' + rel_path - if get_svn_url(os.path.join(self.root_dir, rel_path)) != url: - return [] - return super(ApiSvnQuick, self).check_dir(rel_path) - - -class ApiAllFilesAtOnceBase(ApiBase): - _files = None - - def list_dir(self, start_dir): - """Lists all the files and directory inside start_dir.""" - if self._files is None: - self._files = sorted(self._get_all_files()) - if not self.bare_output: - print 'Found %s files' % len(self._files) - start_dir = start_dir[len(self.root_dir) + 1:] - return [ - x[len(start_dir):] for x in self._files if x.startswith(start_dir) - ] - - def _get_all_files(self): - """Lists all the files and directory inside self._root_dir.""" - raise NotImplementedError() - - -class ApiSvn(ApiAllFilesAtOnceBase): - """Returns all the subversion controlled files. - - Warning: svn ls is abnormally slow. - """ - def _get_all_files(self): - cmd = ['svn', 'ls', '--non-interactive', '--recursive'] - return ( - x for x in capture(cmd, self.root_dir).splitlines() - if not x.endswith(os.path.sep)) - - -class ApiGit(ApiAllFilesAtOnceBase): - def _get_all_files(self): - return capture(['git', 'ls-files'], cwd=self.root_dir).splitlines() - - -def get_scm(dir_path, bare): - """Returns a properly configured ApiBase instance.""" - cwd = os.getcwd() - root = get_svn_root(dir_path or cwd) - if root: - if not bare: - print('Found subversion checkout at %s' % root) - return ApiSvnQuick(dir_path or root, bare) - root = get_git_root(dir_path or cwd) - if root: - if not bare: - print('Found git repository at %s' % root) - return ApiGit(dir_path or root, bare) - - # Returns a non-scm aware checker. - if not bare: - print('Failed to determine the SCM for %s' % dir_path) - return ApiBase(dir_path or cwd, bare) - - -def main(): - usage = """Usage: python %prog [--root ] [tocheck] - tocheck Specifies the directory, relative to root, to check. This defaults - to "." so it checks everything. - -Examples: - python %prog - python %prog --root /path/to/source chrome""" - - parser = optparse.OptionParser(usage=usage) - parser.add_option( - '--root', - help='Specifies the repository root. This defaults ' - 'to the checkout repository root') - parser.add_option( - '-v', '--verbose', action='count', default=0, help='Print debug logging') - parser.add_option( - '--bare', - action='store_true', - default=False, - help='Prints the bare filename triggering the checks') - parser.add_option( - '--file', action='append', dest='files', - help='Specifics a list of files to check the permissions of. Only these ' - 'files will be checked') - options, args = parser.parse_args() - - levels = [logging.ERROR, logging.INFO, logging.DEBUG] - logging.basicConfig(level=levels[min(len(levels) - 1, options.verbose)]) - - if len(args) > 1: - parser.error('Too many arguments used') - - if options.root: - options.root = os.path.abspath(options.root) - - if options.files: - errors = check_files(options.root, options.files, options.bare) - print '\n'.join(errors) - return bool(errors) - - api = get_scm(options.root, options.bare) - if args: - start_dir = args[0] - else: - start_dir = api.root_dir - - errors = api.check(start_dir) - - if not options.bare: - print 'Processed %s files, %d files where tested for shebang/ELF header' % ( - api.count, api.count_read_header) - - if errors: - if not options.bare: - print '\nFAILED\n' - print '\n'.join(errors) - return 1 - if not options.bare: - print '\nSUCCESS\n' - return 0 - - -if '__main__' == __name__: - sys.exit(main()) diff --git a/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp b/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp new file mode 100644 index 00000000000..d1d3a468ec8 --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp @@ -0,0 +1,1486 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This clang plugin checks various invariants of the Blink garbage +// collection infrastructure. +// +// Errors are described at: +// http://www.chromium.org/developers/blink-gc-plugin-errors + +#include "Config.h" +#include "JsonWriter.h" +#include "RecordInfo.h" + +#include "clang/AST/AST.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Frontend/FrontendPluginRegistry.h" + +using namespace clang; +using std::string; + +namespace { + +const char kClassMustLeftMostlyDeriveGC[] = + "[blink-gc] Class %0 must derive its GC base in the left-most position."; + +const char kClassRequiresTraceMethod[] = + "[blink-gc] Class %0 requires a trace method."; + +const char kBaseRequiresTracing[] = + "[blink-gc] Base class %0 of derived class %1 requires tracing."; + +const char kBaseRequiresTracingNote[] = + "[blink-gc] Untraced base class %0 declared here:"; + +const char kFieldsRequireTracing[] = + "[blink-gc] Class %0 has untraced fields that require tracing."; + +const char kFieldRequiresTracingNote[] = + "[blink-gc] Untraced field %0 declared here:"; + +const char kClassContainsInvalidFields[] = + "[blink-gc] Class %0 contains invalid fields."; + +const char kClassContainsGCRoot[] = + "[blink-gc] Class %0 contains GC root in field %1."; + +const char kClassRequiresFinalization[] = + "[blink-gc] Class %0 requires finalization."; + +const char kFinalizerAccessesFinalizedField[] = + "[blink-gc] Finalizer %0 accesses potentially finalized field %1."; + +const char kRawPtrToGCManagedClassNote[] = + "[blink-gc] Raw pointer field %0 to a GC managed class declared here:"; + +const char kRefPtrToGCManagedClassNote[] = + "[blink-gc] RefPtr field %0 to a GC managed class declared here:"; + +const char kOwnPtrToGCManagedClassNote[] = + "[blink-gc] OwnPtr field %0 to a GC managed class declared here:"; + +const char kStackAllocatedFieldNote[] = + "[blink-gc] Stack-allocated field %0 declared here:"; + +const char kMemberInUnmanagedClassNote[] = + "[blink-gc] Member field %0 in unmanaged class declared here:"; + +const char kPartObjectToGCDerivedClassNote[] = + "[blink-gc] Part-object field %0 to a GC derived class declared here:"; + +const char kPartObjectContainsGCRootNote[] = + "[blink-gc] Field %0 with embedded GC root in %1 declared here:"; + +const char kFieldContainsGCRootNote[] = + "[blink-gc] Field %0 defining a GC root declared here:"; + +const char kOverriddenNonVirtualTrace[] = + "[blink-gc] Class %0 overrides non-virtual trace of base class %1."; + +const char kOverriddenNonVirtualTraceNote[] = + "[blink-gc] Non-virtual trace method declared here:"; + +const char kMissingTraceDispatchMethod[] = + "[blink-gc] Class %0 is missing manual trace dispatch."; + +const char kMissingFinalizeDispatchMethod[] = + "[blink-gc] Class %0 is missing manual finalize dispatch."; + +const char kVirtualAndManualDispatch[] = + "[blink-gc] Class %0 contains or inherits virtual methods" + " but implements manual dispatching."; + +const char kMissingTraceDispatch[] = + "[blink-gc] Missing dispatch to class %0 in manual trace dispatch."; + +const char kMissingFinalizeDispatch[] = + "[blink-gc] Missing dispatch to class %0 in manual finalize dispatch."; + +const char kFinalizedFieldNote[] = + "[blink-gc] Potentially finalized field %0 declared here:"; + +const char kUserDeclaredDestructorNote[] = + "[blink-gc] User-declared destructor declared here:"; + +const char kUserDeclaredFinalizerNote[] = + "[blink-gc] User-declared finalizer declared here:"; + +const char kBaseRequiresFinalizationNote[] = + "[blink-gc] Base class %0 requiring finalization declared here:"; + +const char kFieldRequiresFinalizationNote[] = + "[blink-gc] Field %0 requiring finalization declared here:"; + +const char kManualDispatchMethodNote[] = + "[blink-gc] Manual dispatch %0 declared here:"; + +const char kDerivesNonStackAllocated[] = + "[blink-gc] Stack-allocated class %0 derives class %1" + " which is not stack allocated."; + +const char kClassOverridesNew[] = + "[blink-gc] Garbage collected class %0" + " is not permitted to override its new operator."; + +const char kClassDeclaresPureVirtualTrace[] = + "[blink-gc] Garbage collected class %0" + " is not permitted to declare a pure-virtual trace method."; + +struct BlinkGCPluginOptions { + BlinkGCPluginOptions() : enable_oilpan(false), dump_graph(false) {} + bool enable_oilpan; + bool dump_graph; + std::set ignored_classes; + std::set checked_namespaces; + std::vector ignored_directories; +}; + +typedef std::vector RecordVector; +typedef std::vector MethodVector; + +// Test if a template specialization is an instantiation. +static bool IsTemplateInstantiation(CXXRecordDecl* record) { + ClassTemplateSpecializationDecl* spec = + dyn_cast(record); + if (!spec) + return false; + switch (spec->getTemplateSpecializationKind()) { + case TSK_ImplicitInstantiation: + case TSK_ExplicitInstantiationDefinition: + return true; + case TSK_Undeclared: + case TSK_ExplicitSpecialization: + return false; + // TODO: unsupported cases. + case TSK_ExplicitInstantiationDeclaration: + return false; + } + assert(false && "Unknown template specialization kind"); +} + +// This visitor collects the entry points for the checker. +class CollectVisitor : public RecursiveASTVisitor { + public: + CollectVisitor() {} + + RecordVector& record_decls() { return record_decls_; } + MethodVector& trace_decls() { return trace_decls_; } + + bool shouldVisitTemplateInstantiations() { return false; } + + // Collect record declarations, including nested declarations. + bool VisitCXXRecordDecl(CXXRecordDecl* record) { + if (record->hasDefinition() && record->isCompleteDefinition()) + record_decls_.push_back(record); + return true; + } + + // Collect tracing method definitions, but don't traverse method bodies. + bool TraverseCXXMethodDecl(CXXMethodDecl* method) { + if (method->isThisDeclarationADefinition() && Config::IsTraceMethod(method)) + trace_decls_.push_back(method); + return true; + } + + private: + RecordVector record_decls_; + MethodVector trace_decls_; +}; + +// This visitor checks that a finalizer method does not have invalid access to +// fields that are potentially finalized. A potentially finalized field is +// either a Member, a heap-allocated collection or an off-heap collection that +// contains Members. Invalid uses are currently identified as passing the field +// as the argument of a procedure call or using the -> or [] operators on it. +class CheckFinalizerVisitor + : public RecursiveASTVisitor { + private: + // Simple visitor to determine if the content of a field might be collected + // during finalization. + class MightBeCollectedVisitor : public EdgeVisitor { + public: + MightBeCollectedVisitor() : might_be_collected_(false) {} + bool might_be_collected() { return might_be_collected_; } + void VisitMember(Member* edge) override { might_be_collected_ = true; } + void VisitCollection(Collection* edge) override { + if (edge->on_heap()) { + might_be_collected_ = !edge->is_root(); + } else { + edge->AcceptMembers(this); + } + } + + private: + bool might_be_collected_; + }; + + public: + typedef std::vector > Errors; + + CheckFinalizerVisitor(RecordCache* cache) + : blacklist_context_(false), cache_(cache) {} + + Errors& finalized_fields() { return finalized_fields_; } + + bool WalkUpFromCXXOperatorCallExpr(CXXOperatorCallExpr* expr) { + // Only continue the walk-up if the operator is a blacklisted one. + switch (expr->getOperator()) { + case OO_Arrow: + case OO_Subscript: + this->WalkUpFromCallExpr(expr); + default: + return true; + } + } + + // We consider all non-operator calls to be blacklisted contexts. + bool WalkUpFromCallExpr(CallExpr* expr) { + bool prev_blacklist_context = blacklist_context_; + blacklist_context_ = true; + for (size_t i = 0; i < expr->getNumArgs(); ++i) + this->TraverseStmt(expr->getArg(i)); + blacklist_context_ = prev_blacklist_context; + return true; + } + + bool VisitMemberExpr(MemberExpr* member) { + FieldDecl* field = dyn_cast(member->getMemberDecl()); + if (!field) + return true; + + RecordInfo* info = cache_->Lookup(field->getParent()); + if (!info) + return true; + + RecordInfo::Fields::iterator it = info->GetFields().find(field); + if (it == info->GetFields().end()) + return true; + + if (blacklist_context_ && MightBeCollected(&it->second)) + finalized_fields_.push_back(std::make_pair(member, &it->second)); + return true; + } + + bool MightBeCollected(FieldPoint* point) { + MightBeCollectedVisitor visitor; + point->edge()->Accept(&visitor); + return visitor.might_be_collected(); + } + + private: + bool blacklist_context_; + Errors finalized_fields_; + RecordCache* cache_; +}; + +// This visitor checks that a method contains within its body, a call to a +// method on the provided receiver class. This is used to check manual +// dispatching for trace and finalize methods. +class CheckDispatchVisitor : public RecursiveASTVisitor { + public: + CheckDispatchVisitor(RecordInfo* receiver) + : receiver_(receiver), dispatched_to_receiver_(false) {} + + bool dispatched_to_receiver() { return dispatched_to_receiver_; } + + bool VisitMemberExpr(MemberExpr* member) { + if (CXXMethodDecl* fn = dyn_cast(member->getMemberDecl())) { + if (fn->getParent() == receiver_->record()) + dispatched_to_receiver_ = true; + } + return true; + } + + private: + RecordInfo* receiver_; + bool dispatched_to_receiver_; +}; + +// This visitor checks a tracing method by traversing its body. +// - A member field is considered traced if it is referenced in the body. +// - A base is traced if a base-qualified call to a trace method is found. +class CheckTraceVisitor : public RecursiveASTVisitor { + public: + CheckTraceVisitor(CXXMethodDecl* trace, RecordInfo* info) + : trace_(trace), info_(info) {} + + // Allow recursive traversal by using VisitMemberExpr. + bool VisitMemberExpr(MemberExpr* member) { + // If this member expression references a field decl, mark it as traced. + if (FieldDecl* field = dyn_cast(member->getMemberDecl())) { + if (IsTemplateInstantiation(info_->record())) { + // Pointer equality on fields does not work for template instantiations. + // The trace method refers to fields of the template definition which + // are different from the instantiated fields that need to be traced. + const string& name = field->getNameAsString(); + for (RecordInfo::Fields::iterator it = info_->GetFields().begin(); + it != info_->GetFields().end(); + ++it) { + if (it->first->getNameAsString() == name) { + MarkTraced(it); + break; + } + } + } else { + RecordInfo::Fields::iterator it = info_->GetFields().find(field); + if (it != info_->GetFields().end()) + MarkTraced(it); + } + return true; + } + + // If this is a weak callback function we only check field tracing. + if (IsWeakCallback()) + return true; + + // For method calls, check tracing of bases and other special GC methods. + if (CXXMethodDecl* fn = dyn_cast(member->getMemberDecl())) { + const string& name = fn->getNameAsString(); + // Check weak callbacks. + if (name == kRegisterWeakMembersName) { + if (fn->isTemplateInstantiation()) { + const TemplateArgumentList& args = + *fn->getTemplateSpecializationInfo()->TemplateArguments; + // The second template argument is the callback method. + if (args.size() > 1 && + args[1].getKind() == TemplateArgument::Declaration) { + if (FunctionDecl* callback = + dyn_cast(args[1].getAsDecl())) { + if (callback->hasBody()) { + CheckTraceVisitor nested_visitor(info_); + nested_visitor.TraverseStmt(callback->getBody()); + } + } + } + } + return true; + } + + // Currently, a manually dispatched class cannot have mixin bases (having + // one would add a vtable which we explicitly check against). This means + // that we can only make calls to a trace method of the same name. Revisit + // this if our mixin/vtable assumption changes. + if (Config::IsTraceMethod(fn) && + fn->getName() == trace_->getName() && + member->hasQualifier()) { + if (const Type* type = member->getQualifier()->getAsType()) { + if (CXXRecordDecl* decl = type->getAsCXXRecordDecl()) { + RecordInfo::Bases::iterator it = info_->GetBases().find(decl); + if (it != info_->GetBases().end()) + it->second.MarkTraced(); + } + } + } + } + return true; + } + + private: + // Nested checking for weak callbacks. + CheckTraceVisitor(RecordInfo* info) : trace_(0), info_(info) {} + + bool IsWeakCallback() { return !trace_; } + + void MarkTraced(RecordInfo::Fields::iterator it) { + // In a weak callback we can't mark strong fields as traced. + if (IsWeakCallback() && !it->second.edge()->IsWeakMember()) + return; + it->second.MarkTraced(); + } + + CXXMethodDecl* trace_; + RecordInfo* info_; +}; + +// This visitor checks that the fields of a class and the fields of +// its part objects don't define GC roots. +class CheckGCRootsVisitor : public RecursiveEdgeVisitor { + public: + typedef std::vector RootPath; + typedef std::vector Errors; + + CheckGCRootsVisitor() {} + + Errors& gc_roots() { return gc_roots_; } + + bool ContainsGCRoots(RecordInfo* info) { + for (RecordInfo::Fields::iterator it = info->GetFields().begin(); + it != info->GetFields().end(); + ++it) { + current_.push_back(&it->second); + it->second.edge()->Accept(this); + current_.pop_back(); + } + return !gc_roots_.empty(); + } + + void VisitValue(Value* edge) override { + // TODO: what should we do to check unions? + if (edge->value()->record()->isUnion()) + return; + + // If the value is a part object, then continue checking for roots. + for (Context::iterator it = context().begin(); + it != context().end(); + ++it) { + if (!(*it)->IsCollection()) + return; + } + ContainsGCRoots(edge->value()); + } + + void VisitPersistent(Persistent* edge) override { + gc_roots_.push_back(current_); + } + + void AtCollection(Collection* edge) override { + if (edge->is_root()) + gc_roots_.push_back(current_); + } + + protected: + RootPath current_; + Errors gc_roots_; +}; + +// This visitor checks that the fields of a class are "well formed". +// - OwnPtr, RefPtr and RawPtr must not point to a GC derived types. +// - Part objects must not be GC derived types. +// - An on-heap class must never contain GC roots. +// - Only stack-allocated types may point to stack-allocated types. +class CheckFieldsVisitor : public RecursiveEdgeVisitor { + public: + + enum Error { + kRawPtrToGCManaged, + kRefPtrToGCManaged, + kOwnPtrToGCManaged, + kMemberInUnmanaged, + kPtrFromHeapToStack, + kGCDerivedPartObject + }; + + typedef std::vector > Errors; + + CheckFieldsVisitor(const BlinkGCPluginOptions& options) + : options_(options), current_(0), stack_allocated_host_(false) {} + + Errors& invalid_fields() { return invalid_fields_; } + + bool ContainsInvalidFields(RecordInfo* info) { + stack_allocated_host_ = info->IsStackAllocated(); + managed_host_ = stack_allocated_host_ || + info->IsGCAllocated() || + info->IsNonNewable() || + info->IsOnlyPlacementNewable(); + for (RecordInfo::Fields::iterator it = info->GetFields().begin(); + it != info->GetFields().end(); + ++it) { + context().clear(); + current_ = &it->second; + current_->edge()->Accept(this); + } + return !invalid_fields_.empty(); + } + + void AtMember(Member* edge) override { + if (managed_host_) + return; + // A member is allowed to appear in the context of a root. + for (Context::iterator it = context().begin(); + it != context().end(); + ++it) { + if ((*it)->Kind() == Edge::kRoot) + return; + } + invalid_fields_.push_back(std::make_pair(current_, kMemberInUnmanaged)); + } + + void AtValue(Value* edge) override { + // TODO: what should we do to check unions? + if (edge->value()->record()->isUnion()) + return; + + if (!stack_allocated_host_ && edge->value()->IsStackAllocated()) { + invalid_fields_.push_back(std::make_pair(current_, kPtrFromHeapToStack)); + return; + } + + if (!Parent() && + edge->value()->IsGCDerived() && + !edge->value()->IsGCMixin()) { + invalid_fields_.push_back(std::make_pair(current_, kGCDerivedPartObject)); + return; + } + + if (!Parent() || !edge->value()->IsGCAllocated()) + return; + + // In transition mode, disallow OwnPtr, RawPtr to GC allocated T's, + // also disallow T* in stack-allocated types. + if (options_.enable_oilpan) { + if (Parent()->IsOwnPtr() || + Parent()->IsRawPtrClass() || + (stack_allocated_host_ && Parent()->IsRawPtr())) { + invalid_fields_.push_back(std::make_pair( + current_, InvalidSmartPtr(Parent()))); + return; + } + + return; + } + + if (Parent()->IsRawPtr() || Parent()->IsRefPtr() || Parent()->IsOwnPtr()) { + invalid_fields_.push_back(std::make_pair( + current_, InvalidSmartPtr(Parent()))); + return; + } + } + + void AtCollection(Collection* edge) override { + if (edge->on_heap() && Parent() && Parent()->IsOwnPtr()) + invalid_fields_.push_back(std::make_pair(current_, kOwnPtrToGCManaged)); + } + + private: + Error InvalidSmartPtr(Edge* ptr) { + if (ptr->IsRawPtr()) + return kRawPtrToGCManaged; + if (ptr->IsRefPtr()) + return kRefPtrToGCManaged; + if (ptr->IsOwnPtr()) + return kOwnPtrToGCManaged; + assert(false && "Unknown smart pointer kind"); + } + + const BlinkGCPluginOptions& options_; + FieldPoint* current_; + bool stack_allocated_host_; + bool managed_host_; + Errors invalid_fields_; +}; + +// Main class containing checks for various invariants of the Blink +// garbage collection infrastructure. +class BlinkGCPluginConsumer : public ASTConsumer { + public: + BlinkGCPluginConsumer(CompilerInstance& instance, + const BlinkGCPluginOptions& options) + : instance_(instance), + diagnostic_(instance.getDiagnostics()), + options_(options), + json_(0) { + + // Only check structures in the blink, WebCore and WebKit namespaces. + options_.checked_namespaces.insert("blink"); + options_.checked_namespaces.insert("WebCore"); + options_.checked_namespaces.insert("WebKit"); + + // Ignore GC implementation files. + options_.ignored_directories.push_back("/heap/"); + + // Register warning/error messages. + diag_class_must_left_mostly_derive_gc_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kClassMustLeftMostlyDeriveGC); + diag_class_requires_trace_method_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kClassRequiresTraceMethod); + diag_base_requires_tracing_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kBaseRequiresTracing); + diag_fields_require_tracing_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsRequireTracing); + diag_class_contains_invalid_fields_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kClassContainsInvalidFields); + diag_class_contains_gc_root_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kClassContainsGCRoot); + diag_class_requires_finalization_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kClassRequiresFinalization); + diag_finalizer_accesses_finalized_field_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kFinalizerAccessesFinalizedField); + diag_overridden_non_virtual_trace_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kOverriddenNonVirtualTrace); + diag_missing_trace_dispatch_method_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kMissingTraceDispatchMethod); + diag_missing_finalize_dispatch_method_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kMissingFinalizeDispatchMethod); + diag_virtual_and_manual_dispatch_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kVirtualAndManualDispatch); + diag_missing_trace_dispatch_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kMissingTraceDispatch); + diag_missing_finalize_dispatch_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kMissingFinalizeDispatch); + diag_derives_non_stack_allocated_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kDerivesNonStackAllocated); + diag_class_overrides_new_ = + diagnostic_.getCustomDiagID(getErrorLevel(), kClassOverridesNew); + diag_class_declares_pure_virtual_trace_ = diagnostic_.getCustomDiagID( + getErrorLevel(), kClassDeclaresPureVirtualTrace); + + // Register note messages. + diag_base_requires_tracing_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kBaseRequiresTracingNote); + diag_field_requires_tracing_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kFieldRequiresTracingNote); + diag_raw_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kRawPtrToGCManagedClassNote); + diag_ref_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kRefPtrToGCManagedClassNote); + diag_own_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kOwnPtrToGCManagedClassNote); + diag_stack_allocated_field_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kStackAllocatedFieldNote); + diag_member_in_unmanaged_class_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kMemberInUnmanagedClassNote); + diag_part_object_to_gc_derived_class_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kPartObjectToGCDerivedClassNote); + diag_part_object_contains_gc_root_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kPartObjectContainsGCRootNote); + diag_field_contains_gc_root_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kFieldContainsGCRootNote); + diag_finalized_field_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kFinalizedFieldNote); + diag_user_declared_destructor_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kUserDeclaredDestructorNote); + diag_user_declared_finalizer_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kUserDeclaredFinalizerNote); + diag_base_requires_finalization_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kBaseRequiresFinalizationNote); + diag_field_requires_finalization_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kFieldRequiresFinalizationNote); + diag_overridden_non_virtual_trace_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kOverriddenNonVirtualTraceNote); + diag_manual_dispatch_method_note_ = diagnostic_.getCustomDiagID( + DiagnosticsEngine::Note, kManualDispatchMethodNote); + } + + void HandleTranslationUnit(ASTContext& context) override { + CollectVisitor visitor; + visitor.TraverseDecl(context.getTranslationUnitDecl()); + + if (options_.dump_graph) { + string err; + // TODO: Make createDefaultOutputFile or a shorter createOutputFile work. + json_ = JsonWriter::from(instance_.createOutputFile( + "", // OutputPath + err, // Errors + true, // Binary + true, // RemoveFileOnSignal + instance_.getFrontendOpts().OutputFile, // BaseInput + "graph.json", // Extension + false, // UseTemporary + false, // CreateMissingDirectories + 0, // ResultPathName + 0)); // TempPathName + if (err.empty() && json_) { + json_->OpenList(); + } else { + json_ = 0; + llvm::errs() + << "[blink-gc] " + << "Failed to create an output file for the object graph.\n"; + } + } + + for (RecordVector::iterator it = visitor.record_decls().begin(); + it != visitor.record_decls().end(); + ++it) { + CheckRecord(cache_.Lookup(*it)); + } + + for (MethodVector::iterator it = visitor.trace_decls().begin(); + it != visitor.trace_decls().end(); + ++it) { + CheckTracingMethod(*it); + } + + if (json_) { + json_->CloseList(); + delete json_; + json_ = 0; + } + } + + // Main entry for checking a record declaration. + void CheckRecord(RecordInfo* info) { + if (IsIgnored(info)) + return; + + CXXRecordDecl* record = info->record(); + + // TODO: what should we do to check unions? + if (record->isUnion()) + return; + + // If this is the primary template declaration, check its specializations. + if (record->isThisDeclarationADefinition() && + record->getDescribedClassTemplate()) { + ClassTemplateDecl* tmpl = record->getDescribedClassTemplate(); + for (ClassTemplateDecl::spec_iterator it = tmpl->spec_begin(); + it != tmpl->spec_end(); + ++it) { + CheckClass(cache_.Lookup(*it)); + } + return; + } + + CheckClass(info); + } + + // Check a class-like object (eg, class, specialization, instantiation). + void CheckClass(RecordInfo* info) { + if (!info) + return; + + // Check consistency of stack-allocated hierarchies. + if (info->IsStackAllocated()) { + for (RecordInfo::Bases::iterator it = info->GetBases().begin(); + it != info->GetBases().end(); + ++it) { + if (!it->second.info()->IsStackAllocated()) + ReportDerivesNonStackAllocated(info, &it->second); + } + } + + if (CXXMethodDecl* trace = info->GetTraceMethod()) { + if (trace->isPure()) + ReportClassDeclaresPureVirtualTrace(info, trace); + } else if (info->RequiresTraceMethod()) { + ReportClassRequiresTraceMethod(info); + } + + { + CheckFieldsVisitor visitor(options_); + if (visitor.ContainsInvalidFields(info)) + ReportClassContainsInvalidFields(info, &visitor.invalid_fields()); + } + + if (info->IsGCDerived()) { + + if (!info->IsGCMixin()) { + CheckLeftMostDerived(info); + CheckDispatch(info); + if (CXXMethodDecl* newop = info->DeclaresNewOperator()) + ReportClassOverridesNew(info, newop); + } + + { + CheckGCRootsVisitor visitor; + if (visitor.ContainsGCRoots(info)) + ReportClassContainsGCRoots(info, &visitor.gc_roots()); + } + + if (info->NeedsFinalization()) + CheckFinalization(info); + } + + DumpClass(info); + } + + void CheckLeftMostDerived(RecordInfo* info) { + CXXRecordDecl* left_most = info->record(); + CXXRecordDecl::base_class_iterator it = left_most->bases_begin(); + while (it != left_most->bases_end()) { + left_most = it->getType()->getAsCXXRecordDecl(); + it = left_most->bases_begin(); + } + if (!Config::IsGCBase(left_most->getName())) + ReportClassMustLeftMostlyDeriveGC(info); + } + + void CheckDispatch(RecordInfo* info) { + bool finalized = info->IsGCFinalized(); + CXXMethodDecl* trace_dispatch = info->GetTraceDispatchMethod(); + CXXMethodDecl* finalize_dispatch = info->GetFinalizeDispatchMethod(); + if (!trace_dispatch && !finalize_dispatch) + return; + + CXXRecordDecl* base = trace_dispatch ? trace_dispatch->getParent() + : finalize_dispatch->getParent(); + + // Check that dispatch methods are defined at the base. + if (base == info->record()) { + if (!trace_dispatch) + ReportMissingTraceDispatchMethod(info); + if (finalized && !finalize_dispatch) + ReportMissingFinalizeDispatchMethod(info); + if (!finalized && finalize_dispatch) { + ReportClassRequiresFinalization(info); + NoteUserDeclaredFinalizer(finalize_dispatch); + } + } + + // Check that classes implementing manual dispatch do not have vtables. + if (info->record()->isPolymorphic()) + ReportVirtualAndManualDispatch( + info, trace_dispatch ? trace_dispatch : finalize_dispatch); + + // If this is a non-abstract class check that it is dispatched to. + // TODO: Create a global variant of this local check. We can only check if + // the dispatch body is known in this compilation unit. + if (info->IsConsideredAbstract()) + return; + + const FunctionDecl* defn; + + if (trace_dispatch && trace_dispatch->isDefined(defn)) { + CheckDispatchVisitor visitor(info); + visitor.TraverseStmt(defn->getBody()); + if (!visitor.dispatched_to_receiver()) + ReportMissingTraceDispatch(defn, info); + } + + if (finalized && finalize_dispatch && finalize_dispatch->isDefined(defn)) { + CheckDispatchVisitor visitor(info); + visitor.TraverseStmt(defn->getBody()); + if (!visitor.dispatched_to_receiver()) + ReportMissingFinalizeDispatch(defn, info); + } + } + + // TODO: Should we collect destructors similar to trace methods? + void CheckFinalization(RecordInfo* info) { + CXXDestructorDecl* dtor = info->record()->getDestructor(); + + // For finalized classes, check the finalization method if possible. + if (info->IsGCFinalized()) { + if (dtor && dtor->hasBody()) { + CheckFinalizerVisitor visitor(&cache_); + visitor.TraverseCXXMethodDecl(dtor); + if (!visitor.finalized_fields().empty()) { + ReportFinalizerAccessesFinalizedFields( + dtor, &visitor.finalized_fields()); + } + } + return; + } + + // Don't require finalization of a mixin that has not yet been "mixed in". + if (info->IsGCMixin()) + return; + + // Report the finalization error, and proceed to print possible causes for + // the finalization requirement. + ReportClassRequiresFinalization(info); + + if (dtor && dtor->isUserProvided()) + NoteUserDeclaredDestructor(dtor); + + for (RecordInfo::Bases::iterator it = info->GetBases().begin(); + it != info->GetBases().end(); + ++it) { + if (it->second.info()->NeedsFinalization()) + NoteBaseRequiresFinalization(&it->second); + } + + for (RecordInfo::Fields::iterator it = info->GetFields().begin(); + it != info->GetFields().end(); + ++it) { + if (it->second.edge()->NeedsFinalization()) + NoteField(&it->second, diag_field_requires_finalization_note_); + } + } + + // This is the main entry for tracing method definitions. + void CheckTracingMethod(CXXMethodDecl* method) { + RecordInfo* parent = cache_.Lookup(method->getParent()); + if (IsIgnored(parent)) + return; + + // Check templated tracing methods by checking the template instantiations. + // Specialized templates are handled as ordinary classes. + if (ClassTemplateDecl* tmpl = + parent->record()->getDescribedClassTemplate()) { + for (ClassTemplateDecl::spec_iterator it = tmpl->spec_begin(); + it != tmpl->spec_end(); + ++it) { + // Check trace using each template instantiation as the holder. + if (IsTemplateInstantiation(*it)) + CheckTraceOrDispatchMethod(cache_.Lookup(*it), method); + } + return; + } + + CheckTraceOrDispatchMethod(parent, method); + } + + // Determine what type of tracing method this is (dispatch or trace). + void CheckTraceOrDispatchMethod(RecordInfo* parent, CXXMethodDecl* method) { + bool isTraceAfterDispatch; + if (Config::IsTraceMethod(method, &isTraceAfterDispatch)) { + if (isTraceAfterDispatch || !parent->GetTraceDispatchMethod()) { + CheckTraceMethod(parent, method, isTraceAfterDispatch); + } + // Dispatch methods are checked when we identify subclasses. + } + } + + // Check an actual trace method. + void CheckTraceMethod(RecordInfo* parent, + CXXMethodDecl* trace, + bool isTraceAfterDispatch) { + // A non-virtual trace method must not override another trace. + if (!isTraceAfterDispatch && !trace->isVirtual()) { + for (RecordInfo::Bases::iterator it = parent->GetBases().begin(); + it != parent->GetBases().end(); + ++it) { + RecordInfo* base = it->second.info(); + // We allow mixin bases to contain a non-virtual trace since it will + // never be used for dispatching. + if (base->IsGCMixin()) + continue; + if (CXXMethodDecl* other = base->InheritsNonVirtualTrace()) + ReportOverriddenNonVirtualTrace(parent, trace, other); + } + } + + CheckTraceVisitor visitor(trace, parent); + visitor.TraverseCXXMethodDecl(trace); + + for (RecordInfo::Bases::iterator it = parent->GetBases().begin(); + it != parent->GetBases().end(); + ++it) { + if (!it->second.IsProperlyTraced()) + ReportBaseRequiresTracing(parent, trace, it->first); + } + + for (RecordInfo::Fields::iterator it = parent->GetFields().begin(); + it != parent->GetFields().end(); + ++it) { + if (!it->second.IsProperlyTraced()) { + // Discontinue once an untraced-field error is found. + ReportFieldsRequireTracing(parent, trace); + break; + } + } + } + + void DumpClass(RecordInfo* info) { + if (!json_) + return; + + json_->OpenObject(); + json_->Write("name", info->record()->getQualifiedNameAsString()); + json_->Write("loc", GetLocString(info->record()->getLocStart())); + json_->CloseObject(); + + class DumpEdgeVisitor : public RecursiveEdgeVisitor { + public: + DumpEdgeVisitor(JsonWriter* json) : json_(json) {} + void DumpEdge(RecordInfo* src, + RecordInfo* dst, + const string& lbl, + const Edge::LivenessKind& kind, + const string& loc) { + json_->OpenObject(); + json_->Write("src", src->record()->getQualifiedNameAsString()); + json_->Write("dst", dst->record()->getQualifiedNameAsString()); + json_->Write("lbl", lbl); + json_->Write("kind", kind); + json_->Write("loc", loc); + json_->Write("ptr", + !Parent() ? "val" : + Parent()->IsRawPtr() ? "raw" : + Parent()->IsRefPtr() ? "ref" : + Parent()->IsOwnPtr() ? "own" : + (Parent()->IsMember() || + Parent()->IsWeakMember()) ? "mem" : + "val"); + json_->CloseObject(); + } + + void DumpField(RecordInfo* src, FieldPoint* point, const string& loc) { + src_ = src; + point_ = point; + loc_ = loc; + point_->edge()->Accept(this); + } + + void AtValue(Value* e) override { + // The liveness kind of a path from the point to this value + // is given by the innermost place that is non-strong. + Edge::LivenessKind kind = Edge::kStrong; + if (Config::IsIgnoreCycleAnnotated(point_->field())) { + kind = Edge::kWeak; + } else { + for (Context::iterator it = context().begin(); + it != context().end(); + ++it) { + Edge::LivenessKind pointer_kind = (*it)->Kind(); + if (pointer_kind != Edge::kStrong) { + kind = pointer_kind; + break; + } + } + } + DumpEdge( + src_, e->value(), point_->field()->getNameAsString(), kind, loc_); + } + + private: + JsonWriter* json_; + RecordInfo* src_; + FieldPoint* point_; + string loc_; + }; + + DumpEdgeVisitor visitor(json_); + + RecordInfo::Bases& bases = info->GetBases(); + for (RecordInfo::Bases::iterator it = bases.begin(); + it != bases.end(); + ++it) { + visitor.DumpEdge(info, + it->second.info(), + "", + Edge::kStrong, + GetLocString(it->second.spec().getLocStart())); + } + + RecordInfo::Fields& fields = info->GetFields(); + for (RecordInfo::Fields::iterator it = fields.begin(); + it != fields.end(); + ++it) { + visitor.DumpField(info, + &it->second, + GetLocString(it->second.field()->getLocStart())); + } + } + + // Adds either a warning or error, based on the current handling of -Werror. + DiagnosticsEngine::Level getErrorLevel() { + return diagnostic_.getWarningsAsErrors() ? DiagnosticsEngine::Error + : DiagnosticsEngine::Warning; + } + + const string GetLocString(SourceLocation loc) { + const SourceManager& source_manager = instance_.getSourceManager(); + PresumedLoc ploc = source_manager.getPresumedLoc(loc); + if (ploc.isInvalid()) + return ""; + string loc_str; + llvm::raw_string_ostream OS(loc_str); + OS << ploc.getFilename() + << ":" << ploc.getLine() + << ":" << ploc.getColumn(); + return OS.str(); + } + + bool IsIgnored(RecordInfo* record) { + return !record || + !InCheckedNamespace(record) || + IsIgnoredClass(record) || + InIgnoredDirectory(record); + } + + bool IsIgnoredClass(RecordInfo* info) { + // Ignore any class prefixed by SameSizeAs. These are used in + // Blink to verify class sizes and don't need checking. + const string SameSizeAs = "SameSizeAs"; + if (info->name().compare(0, SameSizeAs.size(), SameSizeAs) == 0) + return true; + return options_.ignored_classes.find(info->name()) != + options_.ignored_classes.end(); + } + + bool InIgnoredDirectory(RecordInfo* info) { + string filename; + if (!GetFilename(info->record()->getLocStart(), &filename)) + return false; // TODO: should we ignore non-existing file locations? + std::vector::iterator it = options_.ignored_directories.begin(); + for (; it != options_.ignored_directories.end(); ++it) + if (filename.find(*it) != string::npos) + return true; + return false; + } + + bool InCheckedNamespace(RecordInfo* info) { + if (!info) + return false; + for (DeclContext* context = info->record()->getDeclContext(); + !context->isTranslationUnit(); + context = context->getParent()) { + if (NamespaceDecl* decl = dyn_cast(context)) { + if (options_.checked_namespaces.find(decl->getNameAsString()) != + options_.checked_namespaces.end()) { + return true; + } + } + } + return false; + } + + bool GetFilename(SourceLocation loc, string* filename) { + const SourceManager& source_manager = instance_.getSourceManager(); + SourceLocation spelling_location = source_manager.getSpellingLoc(loc); + PresumedLoc ploc = source_manager.getPresumedLoc(spelling_location); + if (ploc.isInvalid()) { + // If we're in an invalid location, we're looking at things that aren't + // actually stated in the source. + return false; + } + *filename = ploc.getFilename(); + return true; + } + + void ReportClassMustLeftMostlyDeriveGC(RecordInfo* info) { + SourceLocation loc = info->record()->getInnerLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_must_left_mostly_derive_gc_) + << info->record(); + } + + void ReportClassRequiresTraceMethod(RecordInfo* info) { + SourceLocation loc = info->record()->getInnerLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_requires_trace_method_) + << info->record(); + + for (RecordInfo::Bases::iterator it = info->GetBases().begin(); + it != info->GetBases().end(); + ++it) { + if (it->second.NeedsTracing().IsNeeded()) + NoteBaseRequiresTracing(&it->second); + } + + for (RecordInfo::Fields::iterator it = info->GetFields().begin(); + it != info->GetFields().end(); + ++it) { + if (!it->second.IsProperlyTraced()) + NoteFieldRequiresTracing(info, it->first); + } + } + + void ReportBaseRequiresTracing(RecordInfo* derived, + CXXMethodDecl* trace, + CXXRecordDecl* base) { + SourceLocation loc = trace->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_base_requires_tracing_) + << base << derived->record(); + } + + void ReportFieldsRequireTracing(RecordInfo* info, CXXMethodDecl* trace) { + SourceLocation loc = trace->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_fields_require_tracing_) + << info->record(); + for (RecordInfo::Fields::iterator it = info->GetFields().begin(); + it != info->GetFields().end(); + ++it) { + if (!it->second.IsProperlyTraced()) + NoteFieldRequiresTracing(info, it->first); + } + } + + void ReportClassContainsInvalidFields(RecordInfo* info, + CheckFieldsVisitor::Errors* errors) { + SourceLocation loc = info->record()->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_contains_invalid_fields_) + << info->record(); + for (CheckFieldsVisitor::Errors::iterator it = errors->begin(); + it != errors->end(); + ++it) { + unsigned error; + if (it->second == CheckFieldsVisitor::kRawPtrToGCManaged) { + error = diag_raw_ptr_to_gc_managed_class_note_; + } else if (it->second == CheckFieldsVisitor::kRefPtrToGCManaged) { + error = diag_ref_ptr_to_gc_managed_class_note_; + } else if (it->second == CheckFieldsVisitor::kOwnPtrToGCManaged) { + error = diag_own_ptr_to_gc_managed_class_note_; + } else if (it->second == CheckFieldsVisitor::kMemberInUnmanaged) { + error = diag_member_in_unmanaged_class_note_; + } else if (it->second == CheckFieldsVisitor::kPtrFromHeapToStack) { + error = diag_stack_allocated_field_note_; + } else if (it->second == CheckFieldsVisitor::kGCDerivedPartObject) { + error = diag_part_object_to_gc_derived_class_note_; + } else { + assert(false && "Unknown field error"); + } + NoteField(it->first, error); + } + } + + void ReportClassContainsGCRoots(RecordInfo* info, + CheckGCRootsVisitor::Errors* errors) { + SourceLocation loc = info->record()->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + for (CheckGCRootsVisitor::Errors::iterator it = errors->begin(); + it != errors->end(); + ++it) { + CheckGCRootsVisitor::RootPath::iterator path = it->begin(); + FieldPoint* point = *path; + diagnostic_.Report(full_loc, diag_class_contains_gc_root_) + << info->record() << point->field(); + while (++path != it->end()) { + NotePartObjectContainsGCRoot(point); + point = *path; + } + NoteFieldContainsGCRoot(point); + } + } + + void ReportFinalizerAccessesFinalizedFields( + CXXMethodDecl* dtor, + CheckFinalizerVisitor::Errors* fields) { + for (CheckFinalizerVisitor::Errors::iterator it = fields->begin(); + it != fields->end(); + ++it) { + SourceLocation loc = it->first->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_finalizer_accesses_finalized_field_) + << dtor << it->second->field(); + NoteField(it->second, diag_finalized_field_note_); + } + } + + void ReportClassRequiresFinalization(RecordInfo* info) { + SourceLocation loc = info->record()->getInnerLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_requires_finalization_) + << info->record(); + } + + void ReportOverriddenNonVirtualTrace(RecordInfo* info, + CXXMethodDecl* trace, + CXXMethodDecl* overridden) { + SourceLocation loc = trace->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_overridden_non_virtual_trace_) + << info->record() << overridden->getParent(); + NoteOverriddenNonVirtualTrace(overridden); + } + + void ReportMissingTraceDispatchMethod(RecordInfo* info) { + ReportMissingDispatchMethod(info, diag_missing_trace_dispatch_method_); + } + + void ReportMissingFinalizeDispatchMethod(RecordInfo* info) { + ReportMissingDispatchMethod(info, diag_missing_finalize_dispatch_method_); + } + + void ReportMissingDispatchMethod(RecordInfo* info, unsigned error) { + SourceLocation loc = info->record()->getInnerLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, error) << info->record(); + } + + void ReportVirtualAndManualDispatch(RecordInfo* info, + CXXMethodDecl* dispatch) { + SourceLocation loc = info->record()->getInnerLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_virtual_and_manual_dispatch_) + << info->record(); + NoteManualDispatchMethod(dispatch); + } + + void ReportMissingTraceDispatch(const FunctionDecl* dispatch, + RecordInfo* receiver) { + ReportMissingDispatch(dispatch, receiver, diag_missing_trace_dispatch_); + } + + void ReportMissingFinalizeDispatch(const FunctionDecl* dispatch, + RecordInfo* receiver) { + ReportMissingDispatch(dispatch, receiver, diag_missing_finalize_dispatch_); + } + + void ReportMissingDispatch(const FunctionDecl* dispatch, + RecordInfo* receiver, + unsigned error) { + SourceLocation loc = dispatch->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, error) << receiver->record(); + } + + void ReportDerivesNonStackAllocated(RecordInfo* info, BasePoint* base) { + SourceLocation loc = base->spec().getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_derives_non_stack_allocated_) + << info->record() << base->info()->record(); + } + + void ReportClassOverridesNew(RecordInfo* info, CXXMethodDecl* newop) { + SourceLocation loc = newop->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_overrides_new_) << info->record(); + } + + void ReportClassDeclaresPureVirtualTrace(RecordInfo* info, + CXXMethodDecl* trace) { + SourceLocation loc = trace->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_class_declares_pure_virtual_trace_) + << info->record(); + } + + void NoteManualDispatchMethod(CXXMethodDecl* dispatch) { + SourceLocation loc = dispatch->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_manual_dispatch_method_note_) << dispatch; + } + + void NoteBaseRequiresTracing(BasePoint* base) { + SourceLocation loc = base->spec().getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_base_requires_tracing_note_) + << base->info()->record(); + } + + void NoteFieldRequiresTracing(RecordInfo* holder, FieldDecl* field) { + NoteField(field, diag_field_requires_tracing_note_); + } + + void NotePartObjectContainsGCRoot(FieldPoint* point) { + FieldDecl* field = point->field(); + SourceLocation loc = field->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_part_object_contains_gc_root_note_) + << field << field->getParent(); + } + + void NoteFieldContainsGCRoot(FieldPoint* point) { + NoteField(point, diag_field_contains_gc_root_note_); + } + + void NoteUserDeclaredDestructor(CXXMethodDecl* dtor) { + SourceLocation loc = dtor->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_user_declared_destructor_note_); + } + + void NoteUserDeclaredFinalizer(CXXMethodDecl* dtor) { + SourceLocation loc = dtor->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_user_declared_finalizer_note_); + } + + void NoteBaseRequiresFinalization(BasePoint* base) { + SourceLocation loc = base->spec().getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_base_requires_finalization_note_) + << base->info()->record(); + } + + void NoteField(FieldPoint* point, unsigned note) { + NoteField(point->field(), note); + } + + void NoteField(FieldDecl* field, unsigned note) { + SourceLocation loc = field->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, note) << field; + } + + void NoteOverriddenNonVirtualTrace(CXXMethodDecl* overridden) { + SourceLocation loc = overridden->getLocStart(); + SourceManager& manager = instance_.getSourceManager(); + FullSourceLoc full_loc(loc, manager); + diagnostic_.Report(full_loc, diag_overridden_non_virtual_trace_note_) + << overridden; + } + + unsigned diag_class_must_left_mostly_derive_gc_; + unsigned diag_class_requires_trace_method_; + unsigned diag_base_requires_tracing_; + unsigned diag_fields_require_tracing_; + unsigned diag_class_contains_invalid_fields_; + unsigned diag_class_contains_gc_root_; + unsigned diag_class_requires_finalization_; + unsigned diag_finalizer_accesses_finalized_field_; + unsigned diag_overridden_non_virtual_trace_; + unsigned diag_missing_trace_dispatch_method_; + unsigned diag_missing_finalize_dispatch_method_; + unsigned diag_virtual_and_manual_dispatch_; + unsigned diag_missing_trace_dispatch_; + unsigned diag_missing_finalize_dispatch_; + unsigned diag_derives_non_stack_allocated_; + unsigned diag_class_overrides_new_; + unsigned diag_class_declares_pure_virtual_trace_; + + unsigned diag_base_requires_tracing_note_; + unsigned diag_field_requires_tracing_note_; + unsigned diag_raw_ptr_to_gc_managed_class_note_; + unsigned diag_ref_ptr_to_gc_managed_class_note_; + unsigned diag_own_ptr_to_gc_managed_class_note_; + unsigned diag_stack_allocated_field_note_; + unsigned diag_member_in_unmanaged_class_note_; + unsigned diag_part_object_to_gc_derived_class_note_; + unsigned diag_part_object_contains_gc_root_note_; + unsigned diag_field_contains_gc_root_note_; + unsigned diag_finalized_field_note_; + unsigned diag_user_declared_destructor_note_; + unsigned diag_user_declared_finalizer_note_; + unsigned diag_base_requires_finalization_note_; + unsigned diag_field_requires_finalization_note_; + unsigned diag_overridden_non_virtual_trace_note_; + unsigned diag_manual_dispatch_method_note_; + + CompilerInstance& instance_; + DiagnosticsEngine& diagnostic_; + BlinkGCPluginOptions options_; + RecordCache cache_; + JsonWriter* json_; +}; + +class BlinkGCPluginAction : public PluginASTAction { + public: + BlinkGCPluginAction() {} + + protected: + // Overridden from PluginASTAction: + virtual ASTConsumer* CreateASTConsumer(CompilerInstance& instance, + llvm::StringRef ref) { + return new BlinkGCPluginConsumer(instance, options_); + } + + virtual bool ParseArgs(const CompilerInstance& instance, + const std::vector& args) { + bool parsed = true; + + for (size_t i = 0; i < args.size() && parsed; ++i) { + if (args[i] == "enable-oilpan") { + options_.enable_oilpan = true; + } else if (args[i] == "dump-graph") { + options_.dump_graph = true; + } else { + parsed = false; + llvm::errs() << "Unknown blink-gc-plugin argument: " << args[i] << "\n"; + } + } + + return parsed; + } + + private: + BlinkGCPluginOptions options_; +}; + +} // namespace + +static FrontendPluginRegistry::Add X( + "blink-gc-plugin", + "Check Blink GC invariants"); diff --git a/chromium/tools/clang/blink_gc_plugin/Config.h b/chromium/tools/clang/blink_gc_plugin/Config.h new file mode 100644 index 00000000000..765e32ae8db --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/Config.h @@ -0,0 +1,173 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file defines the names used by GC infrastructure. + +#ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ +#define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ + +#include "clang/AST/AST.h" +#include "clang/AST/Attr.h" + +const char kNewOperatorName[] = "operator new"; +const char kCreateName[] = "create"; +const char kTraceName[] = "trace"; +const char kFinalizeName[] = "finalizeGarbageCollectedObject"; +const char kTraceAfterDispatchName[] = "traceAfterDispatch"; +const char kRegisterWeakMembersName[] = "registerWeakMembers"; +const char kHeapAllocatorName[] = "HeapAllocator"; + +class Config { + public: + static bool IsMember(const std::string& name) { + return name == "Member"; + } + + static bool IsWeakMember(const std::string& name) { + return name == "WeakMember"; + } + + static bool IsMemberHandle(const std::string& name) { + return IsMember(name) || + IsWeakMember(name); + } + + static bool IsPersistent(const std::string& name) { + return name == "Persistent"; + } + + static bool IsPersistentHandle(const std::string& name) { + return IsPersistent(name) || + IsPersistentGCCollection(name); + } + + static bool IsRawPtr(const std::string& name) { + return name == "RawPtr"; + } + + static bool IsRefPtr(const std::string& name) { + return name == "RefPtr"; + } + + static bool IsOwnPtr(const std::string& name) { + return name == "OwnPtr"; + } + + static bool IsWTFCollection(const std::string& name) { + return name == "Vector" || + name == "Deque" || + name == "HashSet" || + name == "ListHashSet" || + name == "LinkedHashSet" || + name == "HashCountedSet" || + name == "HashMap"; + } + + static bool IsGCCollection(const std::string& name) { + return name == "HeapVector" || + name == "HeapDeque" || + name == "HeapHashSet" || + name == "HeapListHashSet" || + name == "HeapLinkedHashSet" || + name == "HeapHashCountedSet" || + name == "HeapHashMap" || + IsPersistentGCCollection(name); + } + + static bool IsPersistentGCCollection(const std::string& name) { + return name == "PersistentHeapVector" || + name == "PersistentHeapDeque" || + name == "PersistentHeapHashSet" || + name == "PersistentHeapListHashSet" || + name == "PersistentHeapLinkedHashSet" || + name == "PersistentHeapHashCountedSet" || + name == "PersistentHeapHashMap"; + } + + static bool IsHashMap(const std::string& name) { + return name == "HashMap" || + name == "HeapHashMap" || + name == "PersistentHeapHashMap"; + } + + // Assumes name is a valid collection name. + static size_t CollectionDimension(const std::string& name) { + return (IsHashMap(name) || name == "pair") ? 2 : 1; + } + + static bool IsGCMixinBase(const std::string& name) { + return name == "GarbageCollectedMixin"; + } + + static bool IsGCFinalizedBase(const std::string& name) { + return name == "GarbageCollectedFinalized" || + name == "RefCountedGarbageCollected"; + } + + static bool IsGCBase(const std::string& name) { + return name == "GarbageCollected" || + IsGCFinalizedBase(name) || + IsGCMixinBase(name); + } + + static bool IsAnnotated(clang::Decl* decl, const std::string& anno) { + clang::AnnotateAttr* attr = decl->getAttr(); + return attr && (attr->getAnnotation() == anno); + } + + static bool IsStackAnnotated(clang::Decl* decl) { + return IsAnnotated(decl, "blink_stack_allocated"); + } + + static bool IsIgnoreAnnotated(clang::Decl* decl) { + return IsAnnotated(decl, "blink_gc_plugin_ignore"); + } + + static bool IsIgnoreCycleAnnotated(clang::Decl* decl) { + return IsAnnotated(decl, "blink_gc_plugin_ignore_cycle") || + IsIgnoreAnnotated(decl); + } + + static bool IsVisitor(const std::string& name) { return name == "Visitor"; } + + static bool IsTraceMethod(clang::CXXMethodDecl* method, + bool* isTraceAfterDispatch = 0) { + if (method->getNumParams() != 1) + return false; + + const std::string& name = method->getNameAsString(); + if (name != kTraceName && name != kTraceAfterDispatchName) + return false; + + const clang::QualType& formal_type = method->getParamDecl(0)->getType(); + if (!formal_type->isPointerType()) + return false; + + clang::CXXRecordDecl* pointee_type = + formal_type->getPointeeType()->getAsCXXRecordDecl(); + if (!pointee_type) + return false; + + if (!IsVisitor(pointee_type->getName())) + return false; + + if (isTraceAfterDispatch) + *isTraceAfterDispatch = (name == kTraceAfterDispatchName); + return true; + } + + static bool StartsWith(const std::string& str, const std::string& prefix) { + if (prefix.size() > str.size()) + return false; + return str.compare(0, prefix.size(), prefix) == 0; + } + + static bool EndsWith(const std::string& str, const std::string& suffix) { + if (suffix.size() > str.size()) + return false; + return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; + } +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/Edge.cpp b/chromium/tools/clang/blink_gc_plugin/Edge.cpp new file mode 100644 index 00000000000..c56a5764148 --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/Edge.cpp @@ -0,0 +1,75 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "Config.h" +#include "Edge.h" +#include "RecordInfo.h" + +TracingStatus Value::NeedsTracing(NeedsTracingOption option) { + return value_->NeedsTracing(option); +} + +bool Value::NeedsFinalization() { return value_->NeedsFinalization(); } +bool Collection::NeedsFinalization() { return info_->NeedsFinalization(); } + +void RecursiveEdgeVisitor::AtValue(Value*) {} +void RecursiveEdgeVisitor::AtRawPtr(RawPtr*) {} +void RecursiveEdgeVisitor::AtRefPtr(RefPtr*) {} +void RecursiveEdgeVisitor::AtOwnPtr(OwnPtr*) {} +void RecursiveEdgeVisitor::AtMember(Member*) {} +void RecursiveEdgeVisitor::AtWeakMember(WeakMember*) {} +void RecursiveEdgeVisitor::AtPersistent(Persistent*) {} +void RecursiveEdgeVisitor::AtCollection(Collection*) {} + +void RecursiveEdgeVisitor::VisitValue(Value* e) { + AtValue(e); +} + +void RecursiveEdgeVisitor::VisitRawPtr(RawPtr* e) { + AtRawPtr(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} + +void RecursiveEdgeVisitor::VisitRefPtr(RefPtr* e) { + AtRefPtr(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} +void RecursiveEdgeVisitor::VisitOwnPtr(OwnPtr* e) { + AtOwnPtr(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} + +void RecursiveEdgeVisitor::VisitMember(Member* e) { + AtMember(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} + +void RecursiveEdgeVisitor::VisitWeakMember(WeakMember* e) { + AtWeakMember(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} + +void RecursiveEdgeVisitor::VisitPersistent(Persistent* e) { + AtPersistent(e); + Enter(e); + e->ptr()->Accept(this); + Leave(); +} + +void RecursiveEdgeVisitor::VisitCollection(Collection* e) { + AtCollection(e); + Enter(e); + e->AcceptMembers(this); + Leave(); +} diff --git a/chromium/tools/clang/blink_gc_plugin/Edge.h b/chromium/tools/clang/blink_gc_plugin/Edge.h new file mode 100644 index 00000000000..d0b78b58a1f --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/Edge.h @@ -0,0 +1,245 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TOOLS_BLINK_GC_PLUGIN_EDGE_H_ +#define TOOLS_BLINK_GC_PLUGIN_EDGE_H_ + +#include + +#include "TracingStatus.h" + +class RecordInfo; + +class Edge; +class Value; +class RawPtr; +class RefPtr; +class OwnPtr; +class Member; +class WeakMember; +class Persistent; +class Collection; + +// Bare-bones visitor. +class EdgeVisitor { + public: + virtual void VisitValue(Value*) {} + virtual void VisitRawPtr(RawPtr*) {} + virtual void VisitRefPtr(RefPtr*) {} + virtual void VisitOwnPtr(OwnPtr*) {} + virtual void VisitMember(Member*) {} + virtual void VisitWeakMember(WeakMember*) {} + virtual void VisitPersistent(Persistent*) {} + virtual void VisitCollection(Collection*) {} +}; + +// Recursive edge visitor. The traversed path is accessible in context. +class RecursiveEdgeVisitor : public EdgeVisitor { + public: + // Overrides that recursively walk the edges and record the path. + virtual void VisitValue(Value*) override; + virtual void VisitRawPtr(RawPtr*) override; + virtual void VisitRefPtr(RefPtr*) override; + virtual void VisitOwnPtr(OwnPtr*) override; + virtual void VisitMember(Member*) override; + virtual void VisitWeakMember(WeakMember*) override; + virtual void VisitPersistent(Persistent*) override; + virtual void VisitCollection(Collection*) override; + + protected: + typedef std::deque Context; + Context& context() { return context_; } + Edge* Parent() { return context_.empty() ? 0 : context_.front(); } + void Enter(Edge* e) { return context_.push_front(e); } + void Leave() { context_.pop_front(); } + + // Default callback to overwrite in visitor subclass. + virtual void AtValue(Value*); + virtual void AtRawPtr(RawPtr*); + virtual void AtRefPtr(RefPtr*); + virtual void AtOwnPtr(OwnPtr*); + virtual void AtMember(Member*); + virtual void AtWeakMember(WeakMember*); + virtual void AtPersistent(Persistent*); + virtual void AtCollection(Collection*); + + private: + Context context_; +}; + +// Base class for all edges. +class Edge { + public: + enum NeedsTracingOption { kRecursive, kNonRecursive }; + enum LivenessKind { kWeak, kStrong, kRoot }; + + virtual ~Edge() {} + virtual LivenessKind Kind() = 0; + virtual void Accept(EdgeVisitor*) = 0; + virtual bool NeedsFinalization() = 0; + virtual TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Unknown(); + } + + virtual bool IsValue() { return false; } + virtual bool IsRawPtr() { return false; } + virtual bool IsRawPtrClass() { return false; } + virtual bool IsRefPtr() { return false; } + virtual bool IsOwnPtr() { return false; } + virtual bool IsMember() { return false; } + virtual bool IsWeakMember() { return false; } + virtual bool IsPersistent() { return false; } + virtual bool IsCollection() { return false; } +}; + +// A value edge is a direct edge to some type, eg, part-object edges. +class Value : public Edge { + public: + explicit Value(RecordInfo* value) : value_(value) {}; + bool IsValue() override { return true; } + LivenessKind Kind() override { return kStrong; } + bool NeedsFinalization() override; + TracingStatus NeedsTracing(NeedsTracingOption) override; + void Accept(EdgeVisitor* visitor) override { visitor->VisitValue(this); } + RecordInfo* value() { return value_; } + + private: + RecordInfo* value_; +}; + +// Shared base for smart-pointer edges. +class PtrEdge : public Edge { + public: + ~PtrEdge() { delete ptr_; } + Edge* ptr() { return ptr_; } + protected: + PtrEdge(Edge* ptr) : ptr_(ptr) { + assert(ptr && "EdgePtr pointer must be non-null"); + } + private: + Edge* ptr_; +}; + +class RawPtr : public PtrEdge { + public: + explicit RawPtr(Edge* ptr, bool is_ptr_class) + : PtrEdge(ptr), is_ptr_class_(is_ptr_class) { } + bool IsRawPtr() { return true; } + bool IsRawPtrClass() { return is_ptr_class_; } + LivenessKind Kind() { return kWeak; } + bool NeedsFinalization() { return false; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Unneeded(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitRawPtr(this); } + private: + bool is_ptr_class_; +}; + +class RefPtr : public PtrEdge { + public: + explicit RefPtr(Edge* ptr) : PtrEdge(ptr) { } + bool IsRefPtr() { return true; } + LivenessKind Kind() { return kStrong; } + bool NeedsFinalization() { return true; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Unneeded(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitRefPtr(this); } +}; + +class OwnPtr : public PtrEdge { + public: + explicit OwnPtr(Edge* ptr) : PtrEdge(ptr) { } + bool IsOwnPtr() { return true; } + LivenessKind Kind() { return kStrong; } + bool NeedsFinalization() { return true; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Unneeded(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitOwnPtr(this); } +}; + +class Member : public PtrEdge { + public: + explicit Member(Edge* ptr) : PtrEdge(ptr) { } + bool IsMember() { return true; } + LivenessKind Kind() { return kStrong; } + bool NeedsFinalization() { return false; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Needed(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitMember(this); } +}; + +class WeakMember : public PtrEdge { + public: + explicit WeakMember(Edge* ptr) : PtrEdge(ptr) { } + bool IsWeakMember() { return true; } + LivenessKind Kind() { return kWeak; } + bool NeedsFinalization() { return false; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Needed(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitWeakMember(this); } +}; + +class Persistent : public PtrEdge { + public: + explicit Persistent(Edge* ptr) : PtrEdge(ptr) { } + bool IsPersistent() { return true; } + LivenessKind Kind() { return kRoot; } + bool NeedsFinalization() { return true; } + TracingStatus NeedsTracing(NeedsTracingOption) { + return TracingStatus::Unneeded(); + } + void Accept(EdgeVisitor* visitor) { visitor->VisitPersistent(this); } +}; + +class Collection : public Edge { + public: + typedef std::vector Members; + Collection(RecordInfo* info, bool on_heap, bool is_root) + : info_(info), + on_heap_(on_heap), + is_root_(is_root) {} + ~Collection() { + for (Members::iterator it = members_.begin(); it != members_.end(); ++it) { + assert(*it && "Collection-edge members must be non-null"); + delete *it; + } + } + bool IsCollection() { return true; } + LivenessKind Kind() { return is_root_ ? kRoot : kStrong; } + bool on_heap() { return on_heap_; } + bool is_root() { return is_root_; } + Members& members() { return members_; } + void Accept(EdgeVisitor* visitor) { visitor->VisitCollection(this); } + void AcceptMembers(EdgeVisitor* visitor) { + for (Members::iterator it = members_.begin(); it != members_.end(); ++it) + (*it)->Accept(visitor); + } + bool NeedsFinalization(); + TracingStatus NeedsTracing(NeedsTracingOption) { + if (is_root_) + return TracingStatus::Unneeded(); + if (on_heap_) + return TracingStatus::Needed(); + // For off-heap collections, determine tracing status of members. + TracingStatus status = TracingStatus::Unneeded(); + for (Members::iterator it = members_.begin(); it != members_.end(); ++it) { + // Do a non-recursive test here since members could equal the holder. + status = status.LUB((*it)->NeedsTracing(kNonRecursive)); + } + return status; + } + + private: + RecordInfo* info_; + Members members_; + bool on_heap_; + bool is_root_; +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_EDGE_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/JsonWriter.h b/chromium/tools/clang/blink_gc_plugin/JsonWriter.h new file mode 100644 index 00000000000..54a87aae59e --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/JsonWriter.h @@ -0,0 +1,73 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_ +#define TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_ + +#include "llvm/Support/raw_ostream.h" + +// Helper to write information for the points-to graph. +class JsonWriter { + public: + static JsonWriter* from(llvm::raw_fd_ostream* os) { + return os ? new JsonWriter(os) : 0; + } + ~JsonWriter() { + os_.close(); + } + void OpenList() { + Separator(); + os_ << "["; + state_.push(false); + } + void OpenList(const std::string key) { + Write(key); + os_ << ":"; + OpenList(); + } + void CloseList() { + os_ << "]"; + state_.pop(); + } + void OpenObject() { + Separator(); + os_ << "{"; + state_.push(false); + } + void CloseObject() { + os_ << "}\n"; + state_.pop(); + } + void Write(const size_t val) { + Separator(); + os_ << val; + } + void Write(const std::string val) { + Separator(); + os_ << "\"" << val << "\""; + } + void Write(const std::string key, const size_t val) { + Separator(); + os_ << "\"" << key << "\":" << val; + } + void Write(const std::string key, const std::string val) { + Separator(); + os_ << "\"" << key << "\":\"" << val << "\""; + } + private: + JsonWriter(llvm::raw_fd_ostream* os) : os_(*os) {} + void Separator() { + if (state_.empty()) + return; + if (state_.top()) { + os_ << ","; + return; + } + state_.top() = true; + } + llvm::raw_fd_ostream& os_; + std::stack state_; +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_JSON_WRITER_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/Makefile b/chromium/tools/clang/blink_gc_plugin/Makefile new file mode 100644 index 00000000000..0b274489a4a --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/Makefile @@ -0,0 +1,21 @@ +# This file requires the clang build system, at least for now. So to use this +# Makefile, you should execute the following commands to copy this directory +# into a clang checkout: +# +# cp -R third_party/llvm/tools/clang/tools/chrome-plugin +# cd third_party/llvm/tools/clang/tools/chrome-plugin +# make + +CLANG_LEVEL := ../.. + +# This line is read by update.sh and other scripts in tools/clang/scripts +LIBRARYNAME = BlinkGCPlugin_8 + +LINK_LIBS_IN_SHARED = 0 +SHARED_LIBRARY = 1 + +include $(CLANG_LEVEL)/Makefile + +ifeq ($(OS),Darwin) + LDFLAGS+=-Wl,-undefined,dynamic_lookup +endif diff --git a/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h b/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h new file mode 100644 index 00000000000..cf4c2c1f70a --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/NeedsTracing.h @@ -0,0 +1,31 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// NeedsTracing is a three-point value ordered by unneeded < unknown < needed. +// Unneeded means that the point definitively does not need to be traced. + +#ifndef TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_ +#define TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_ + +class NeedsTracing { + public: + static NeedsTracing Unneeded() { return kUnneeded; } + static NeedsTracing Unknown() { return kUnknown; } + static NeedsTracing Needed() { return kNeeded; } + bool IsUnneeded() { return value_ == kUnneeded; } + bool IsUnknown() { return value_ == kUnknown; } + bool IsNeeded() { return value_ == kNeeded; } + NeedsTracing LUB(const NeedsTracing& other) { + return value_ > other.value_ ? value_ : other.value_; + } + bool operator==(const NeedsTracing& other) { + return value_ == other.value_; + } + private: + enum Value { kUnneeded, kUnknown, kNeeded }; + NeedsTracing(Value value) : value_(value) {} + Value value_; +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_NEEDS_TRACING_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/OWNERS b/chromium/tools/clang/blink_gc_plugin/OWNERS new file mode 100644 index 00000000000..2eb596cfdc9 --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/OWNERS @@ -0,0 +1,3 @@ +zerny@chromium.org +vegorov@chromium.org +ager@chromium.org diff --git a/chromium/tools/clang/blink_gc_plugin/README.chromium b/chromium/tools/clang/blink_gc_plugin/README.chromium new file mode 100644 index 00000000000..294833c3cf8 --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/README.chromium @@ -0,0 +1,2 @@ +This clang plugin checks various invariants of the Blink garbage +collection infrastructure. diff --git a/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp b/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp new file mode 100644 index 00000000000..5250eaa084d --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/RecordInfo.cpp @@ -0,0 +1,515 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "Config.h" +#include "RecordInfo.h" + +using namespace clang; +using std::string; + +RecordInfo::RecordInfo(CXXRecordDecl* record, RecordCache* cache) + : cache_(cache), + record_(record), + name_(record->getName()), + fields_need_tracing_(TracingStatus::Unknown()), + bases_(0), + fields_(0), + is_stack_allocated_(kNotComputed), + is_non_newable_(kNotComputed), + is_only_placement_newable_(kNotComputed), + determined_trace_methods_(false), + trace_method_(0), + trace_dispatch_method_(0), + finalize_dispatch_method_(0), + is_gc_derived_(false), + base_paths_(0) {} + +RecordInfo::~RecordInfo() { + delete fields_; + delete bases_; + delete base_paths_; +} + +// Get |count| number of template arguments. Returns false if there +// are fewer than |count| arguments or any of the arguments are not +// of a valid Type structure. If |count| is non-positive, all +// arguments are collected. +bool RecordInfo::GetTemplateArgs(size_t count, TemplateArgs* output_args) { + ClassTemplateSpecializationDecl* tmpl = + dyn_cast(record_); + if (!tmpl) + return false; + const TemplateArgumentList& args = tmpl->getTemplateArgs(); + if (args.size() < count) + return false; + if (count <= 0) + count = args.size(); + for (unsigned i = 0; i < count; ++i) { + TemplateArgument arg = args[i]; + if (arg.getKind() == TemplateArgument::Type && !arg.getAsType().isNull()) { + output_args->push_back(arg.getAsType().getTypePtr()); + } else { + return false; + } + } + return true; +} + +// Test if a record is a HeapAllocated collection. +bool RecordInfo::IsHeapAllocatedCollection() { + if (!Config::IsGCCollection(name_) && !Config::IsWTFCollection(name_)) + return false; + + TemplateArgs args; + if (GetTemplateArgs(0, &args)) { + for (TemplateArgs::iterator it = args.begin(); it != args.end(); ++it) { + if (CXXRecordDecl* decl = (*it)->getAsCXXRecordDecl()) + if (decl->getName() == kHeapAllocatorName) + return true; + } + } + + return Config::IsGCCollection(name_); +} + +static bool IsGCBaseCallback(const CXXBaseSpecifier* specifier, + CXXBasePath& path, + void* data) { + if (CXXRecordDecl* record = specifier->getType()->getAsCXXRecordDecl()) + return Config::IsGCBase(record->getName()); + return false; +} + +// Test if a record is derived from a garbage collected base. +bool RecordInfo::IsGCDerived() { + // If already computed, return the known result. + if (base_paths_) + return is_gc_derived_; + + base_paths_ = new CXXBasePaths(true, true, false); + + if (!record_->hasDefinition()) + return false; + + // The base classes are not themselves considered garbage collected objects. + if (Config::IsGCBase(name_)) + return false; + + // Walk the inheritance tree to find GC base classes. + is_gc_derived_ = record_->lookupInBases(IsGCBaseCallback, 0, *base_paths_); + return is_gc_derived_; +} + +bool RecordInfo::IsGCFinalized() { + if (!IsGCDerived()) + return false; + for (CXXBasePaths::paths_iterator it = base_paths_->begin(); + it != base_paths_->end(); + ++it) { + const CXXBasePathElement& elem = (*it)[it->size() - 1]; + CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl(); + if (Config::IsGCFinalizedBase(base->getName())) + return true; + } + return false; +} + +// A GC mixin is a class that inherits from a GC mixin base and has +// not yet been "mixed in" with another GC base class. +bool RecordInfo::IsGCMixin() { + if (!IsGCDerived() || base_paths_->begin() == base_paths_->end()) + return false; + for (CXXBasePaths::paths_iterator it = base_paths_->begin(); + it != base_paths_->end(); + ++it) { + // Get the last element of the path. + const CXXBasePathElement& elem = (*it)[it->size() - 1]; + CXXRecordDecl* base = elem.Base->getType()->getAsCXXRecordDecl(); + // If it is not a mixin base we are done. + if (!Config::IsGCMixinBase(base->getName())) + return false; + } + // This is a mixin if all GC bases are mixins. + return true; +} + +// Test if a record is allocated on the managed heap. +bool RecordInfo::IsGCAllocated() { + return IsGCDerived() || IsHeapAllocatedCollection(); +} + +RecordInfo* RecordCache::Lookup(CXXRecordDecl* record) { + // Ignore classes annotated with the GC_PLUGIN_IGNORE macro. + if (!record || Config::IsIgnoreAnnotated(record)) + return 0; + Cache::iterator it = cache_.find(record); + if (it != cache_.end()) + return &it->second; + return &cache_.insert(std::make_pair(record, RecordInfo(record, this))) + .first->second; +} + +bool RecordInfo::IsStackAllocated() { + if (is_stack_allocated_ == kNotComputed) { + is_stack_allocated_ = kFalse; + for (Bases::iterator it = GetBases().begin(); + it != GetBases().end(); + ++it) { + if (it->second.info()->IsStackAllocated()) { + is_stack_allocated_ = kTrue; + return is_stack_allocated_; + } + } + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (it->getNameAsString() == kNewOperatorName && + it->isDeleted() && + Config::IsStackAnnotated(*it)) { + is_stack_allocated_ = kTrue; + return is_stack_allocated_; + } + } + } + return is_stack_allocated_; +} + +bool RecordInfo::IsNonNewable() { + if (is_non_newable_ == kNotComputed) { + bool deleted = false; + bool all_deleted = true; + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (it->getNameAsString() == kNewOperatorName) { + deleted = it->isDeleted(); + all_deleted = all_deleted && deleted; + } + } + is_non_newable_ = (deleted && all_deleted) ? kTrue : kFalse; + } + return is_non_newable_; +} + +bool RecordInfo::IsOnlyPlacementNewable() { + if (is_only_placement_newable_ == kNotComputed) { + bool placement = false; + bool new_deleted = false; + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (it->getNameAsString() == kNewOperatorName) { + if (it->getNumParams() == 1) { + new_deleted = it->isDeleted(); + } else if (it->getNumParams() == 2) { + placement = !it->isDeleted(); + } + } + } + is_only_placement_newable_ = (placement && new_deleted) ? kTrue : kFalse; + } + return is_only_placement_newable_; +} + +CXXMethodDecl* RecordInfo::DeclaresNewOperator() { + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (it->getNameAsString() == kNewOperatorName && it->getNumParams() == 1) + return *it; + } + return 0; +} + +// An object requires a tracing method if it has any fields that need tracing +// or if it inherits from multiple bases that need tracing. +bool RecordInfo::RequiresTraceMethod() { + if (IsStackAllocated()) + return false; + unsigned bases_with_trace = 0; + for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { + if (it->second.NeedsTracing().IsNeeded()) + ++bases_with_trace; + } + if (bases_with_trace > 1) + return true; + GetFields(); + return fields_need_tracing_.IsNeeded(); +} + +// Get the actual tracing method (ie, can be traceAfterDispatch if there is a +// dispatch method). +CXXMethodDecl* RecordInfo::GetTraceMethod() { + DetermineTracingMethods(); + return trace_method_; +} + +// Get the static trace dispatch method. +CXXMethodDecl* RecordInfo::GetTraceDispatchMethod() { + DetermineTracingMethods(); + return trace_dispatch_method_; +} + +CXXMethodDecl* RecordInfo::GetFinalizeDispatchMethod() { + DetermineTracingMethods(); + return finalize_dispatch_method_; +} + +RecordInfo::Bases& RecordInfo::GetBases() { + if (!bases_) + bases_ = CollectBases(); + return *bases_; +} + +bool RecordInfo::InheritsTrace() { + if (GetTraceMethod()) + return true; + for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { + if (it->second.info()->InheritsTrace()) + return true; + } + return false; +} + +CXXMethodDecl* RecordInfo::InheritsNonVirtualTrace() { + if (CXXMethodDecl* trace = GetTraceMethod()) + return trace->isVirtual() ? 0 : trace; + for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { + if (CXXMethodDecl* trace = it->second.info()->InheritsNonVirtualTrace()) + return trace; + } + return 0; +} + +// A (non-virtual) class is considered abstract in Blink if it has +// no public constructors and no create methods. +bool RecordInfo::IsConsideredAbstract() { + for (CXXRecordDecl::ctor_iterator it = record_->ctor_begin(); + it != record_->ctor_end(); + ++it) { + if (!it->isCopyOrMoveConstructor() && it->getAccess() == AS_public) + return false; + } + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (it->getNameAsString() == kCreateName) + return false; + } + return true; +} + +RecordInfo::Bases* RecordInfo::CollectBases() { + // Compute the collection locally to avoid inconsistent states. + Bases* bases = new Bases; + if (!record_->hasDefinition()) + return bases; + for (CXXRecordDecl::base_class_iterator it = record_->bases_begin(); + it != record_->bases_end(); + ++it) { + const CXXBaseSpecifier& spec = *it; + RecordInfo* info = cache_->Lookup(spec.getType()); + if (!info) + continue; + CXXRecordDecl* base = info->record(); + TracingStatus status = info->InheritsTrace() + ? TracingStatus::Needed() + : TracingStatus::Unneeded(); + bases->insert(std::make_pair(base, BasePoint(spec, info, status))); + } + return bases; +} + +RecordInfo::Fields& RecordInfo::GetFields() { + if (!fields_) + fields_ = CollectFields(); + return *fields_; +} + +RecordInfo::Fields* RecordInfo::CollectFields() { + // Compute the collection locally to avoid inconsistent states. + Fields* fields = new Fields; + if (!record_->hasDefinition()) + return fields; + TracingStatus fields_status = TracingStatus::Unneeded(); + for (RecordDecl::field_iterator it = record_->field_begin(); + it != record_->field_end(); + ++it) { + FieldDecl* field = *it; + // Ignore fields annotated with the GC_PLUGIN_IGNORE macro. + if (Config::IsIgnoreAnnotated(field)) + continue; + if (Edge* edge = CreateEdge(field->getType().getTypePtrOrNull())) { + fields_status = fields_status.LUB(edge->NeedsTracing(Edge::kRecursive)); + fields->insert(std::make_pair(field, FieldPoint(field, edge))); + } + } + fields_need_tracing_ = fields_status; + return fields; +} + +void RecordInfo::DetermineTracingMethods() { + if (determined_trace_methods_) + return; + determined_trace_methods_ = true; + if (Config::IsGCBase(name_)) + return; + CXXMethodDecl* trace = 0; + CXXMethodDecl* traceAfterDispatch = 0; + bool isTraceAfterDispatch; + for (CXXRecordDecl::method_iterator it = record_->method_begin(); + it != record_->method_end(); + ++it) { + if (Config::IsTraceMethod(*it, &isTraceAfterDispatch)) { + if (isTraceAfterDispatch) { + traceAfterDispatch = *it; + } else { + trace = *it; + } + } else if (it->getNameAsString() == kFinalizeName) { + finalize_dispatch_method_ = *it; + } + } + if (traceAfterDispatch) { + trace_method_ = traceAfterDispatch; + trace_dispatch_method_ = trace; + } else { + // TODO: Can we never have a dispatch method called trace without the same + // class defining a traceAfterDispatch method? + trace_method_ = trace; + trace_dispatch_method_ = 0; + } + if (trace_dispatch_method_ && finalize_dispatch_method_) + return; + // If this class does not define dispatching methods inherit them. + for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { + // TODO: Does it make sense to inherit multiple dispatch methods? + if (CXXMethodDecl* dispatch = it->second.info()->GetTraceDispatchMethod()) { + assert(!trace_dispatch_method_ && "Multiple trace dispatching methods"); + trace_dispatch_method_ = dispatch; + } + if (CXXMethodDecl* dispatch = + it->second.info()->GetFinalizeDispatchMethod()) { + assert(!finalize_dispatch_method_ && + "Multiple finalize dispatching methods"); + finalize_dispatch_method_ = dispatch; + } + } +} + +// TODO: Add classes with a finalize() method that specialize FinalizerTrait. +bool RecordInfo::NeedsFinalization() { + return record_->hasNonTrivialDestructor(); +} + +// A class needs tracing if: +// - it is allocated on the managed heap, +// - it is derived from a class that needs tracing, or +// - it contains fields that need tracing. +// TODO: Defining NeedsTracing based on whether a class defines a trace method +// (of the proper signature) over approximates too much. The use of transition +// types causes some classes to have trace methods without them needing to be +// traced. +TracingStatus RecordInfo::NeedsTracing(Edge::NeedsTracingOption option) { + if (IsGCAllocated()) + return TracingStatus::Needed(); + + if (IsStackAllocated()) + return TracingStatus::Unneeded(); + + for (Bases::iterator it = GetBases().begin(); it != GetBases().end(); ++it) { + if (it->second.info()->NeedsTracing(option).IsNeeded()) + return TracingStatus::Needed(); + } + + if (option == Edge::kRecursive) + GetFields(); + + return fields_need_tracing_; +} + +Edge* RecordInfo::CreateEdge(const Type* type) { + if (!type) { + return 0; + } + + if (type->isPointerType()) { + if (Edge* ptr = CreateEdge(type->getPointeeType().getTypePtrOrNull())) + return new RawPtr(ptr, false); + return 0; + } + + RecordInfo* info = cache_->Lookup(type); + + // If the type is neither a pointer or a C++ record we ignore it. + if (!info) { + return 0; + } + + TemplateArgs args; + + if (Config::IsRawPtr(info->name()) && info->GetTemplateArgs(1, &args)) { + if (Edge* ptr = CreateEdge(args[0])) + return new RawPtr(ptr, true); + return 0; + } + + if (Config::IsRefPtr(info->name()) && info->GetTemplateArgs(1, &args)) { + if (Edge* ptr = CreateEdge(args[0])) + return new RefPtr(ptr); + return 0; + } + + if (Config::IsOwnPtr(info->name()) && info->GetTemplateArgs(1, &args)) { + if (Edge* ptr = CreateEdge(args[0])) + return new OwnPtr(ptr); + return 0; + } + + if (Config::IsMember(info->name()) && info->GetTemplateArgs(1, &args)) { + if (Edge* ptr = CreateEdge(args[0])) + return new Member(ptr); + return 0; + } + + if (Config::IsWeakMember(info->name()) && info->GetTemplateArgs(1, &args)) { + if (Edge* ptr = CreateEdge(args[0])) + return new WeakMember(ptr); + return 0; + } + + if (Config::IsPersistent(info->name())) { + // Persistent might refer to v8::Persistent, so check the name space. + // TODO: Consider using a more canonical identification than names. + NamespaceDecl* ns = + dyn_cast(info->record()->getDeclContext()); + if (!ns || ns->getName() != "WebCore") + return 0; + if (!info->GetTemplateArgs(1, &args)) + return 0; + if (Edge* ptr = CreateEdge(args[0])) + return new Persistent(ptr); + return 0; + } + + if (Config::IsGCCollection(info->name()) || + Config::IsWTFCollection(info->name())) { + bool is_root = Config::IsPersistentGCCollection(info->name()); + bool on_heap = is_root || info->IsHeapAllocatedCollection(); + size_t count = Config::CollectionDimension(info->name()); + if (!info->GetTemplateArgs(count, &args)) + return 0; + Collection* edge = new Collection(info, on_heap, is_root); + for (TemplateArgs::iterator it = args.begin(); it != args.end(); ++it) { + if (Edge* member = CreateEdge(*it)) { + edge->members().push_back(member); + } + // TODO: Handle the case where we fail to create an edge (eg, if the + // argument is a primitive type or just not fully known yet). + } + return edge; + } + + return new Value(info); +} diff --git a/chromium/tools/clang/blink_gc_plugin/RecordInfo.h b/chromium/tools/clang/blink_gc_plugin/RecordInfo.h new file mode 100644 index 00000000000..a2fa10e7a7a --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/RecordInfo.h @@ -0,0 +1,173 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file provides a wrapper for CXXRecordDecl that accumulates GC related +// information about a class. Accumulated information is memoized and the info +// objects are stored in a RecordCache. + +#ifndef TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_ +#define TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_ + +#include +#include + +#include "Edge.h" + +#include "clang/AST/AST.h" +#include "clang/AST/CXXInheritance.h" + +class RecordCache; + +// A potentially tracable and/or lifetime affecting point in the object graph. +class GraphPoint { + public: + GraphPoint() : traced_(false) {} + void MarkTraced() { traced_ = true; } + bool IsProperlyTraced() { return traced_ || !NeedsTracing().IsNeeded(); } + virtual const TracingStatus NeedsTracing() = 0; + + private: + bool traced_; +}; + +class BasePoint : public GraphPoint { + public: + BasePoint(const clang::CXXBaseSpecifier& spec, + RecordInfo* info, + const TracingStatus& status) + : spec_(spec), info_(info), status_(status) {} + const TracingStatus NeedsTracing() { return status_; } + const clang::CXXBaseSpecifier& spec() { return spec_; } + RecordInfo* info() { return info_; } + + private: + const clang::CXXBaseSpecifier& spec_; + RecordInfo* info_; + TracingStatus status_; +}; + +class FieldPoint : public GraphPoint { + public: + FieldPoint(clang::FieldDecl* field, Edge* edge) + : field_(field), edge_(edge) {} + const TracingStatus NeedsTracing() { + return edge_->NeedsTracing(Edge::kRecursive); + } + clang::FieldDecl* field() { return field_; } + Edge* edge() { return edge_; } + + private: + clang::FieldDecl* field_; + Edge* edge_; + + friend class RecordCache; + void deleteEdge() { delete edge_; } +}; + +// Wrapper class to lazily collect information about a C++ record. +class RecordInfo { + public: + typedef std::map Bases; + typedef std::map Fields; + typedef std::vector TemplateArgs; + + ~RecordInfo(); + + clang::CXXRecordDecl* record() const { return record_; } + const std::string& name() const { return name_; } + Fields& GetFields(); + Bases& GetBases(); + clang::CXXMethodDecl* GetTraceMethod(); + clang::CXXMethodDecl* GetTraceDispatchMethod(); + clang::CXXMethodDecl* GetFinalizeDispatchMethod(); + + bool GetTemplateArgs(size_t count, TemplateArgs* output_args); + + bool IsHeapAllocatedCollection(); + bool IsGCDerived(); + bool IsGCAllocated(); + bool IsGCFinalized(); + bool IsGCMixin(); + bool IsStackAllocated(); + bool IsNonNewable(); + bool IsOnlyPlacementNewable(); + clang::CXXMethodDecl* DeclaresNewOperator(); + + bool RequiresTraceMethod(); + bool NeedsFinalization(); + TracingStatus NeedsTracing(Edge::NeedsTracingOption); + clang::CXXMethodDecl* InheritsNonVirtualTrace(); + bool IsConsideredAbstract(); + + private: + RecordInfo(clang::CXXRecordDecl* record, RecordCache* cache); + + Fields* CollectFields(); + Bases* CollectBases(); + void DetermineTracingMethods(); + bool InheritsTrace(); + + Edge* CreateEdge(const clang::Type* type); + + RecordCache* cache_; + clang::CXXRecordDecl* record_; + const std::string name_; + TracingStatus fields_need_tracing_; + Bases* bases_; + Fields* fields_; + + enum CachedBool { kFalse = 0, kTrue = 1, kNotComputed = 2 }; + CachedBool is_stack_allocated_; + CachedBool is_non_newable_; + CachedBool is_only_placement_newable_; + + bool determined_trace_methods_; + clang::CXXMethodDecl* trace_method_; + clang::CXXMethodDecl* trace_dispatch_method_; + clang::CXXMethodDecl* finalize_dispatch_method_; + + bool is_gc_derived_; + clang::CXXBasePaths* base_paths_; + + friend class RecordCache; +}; + +class RecordCache { + public: + RecordInfo* Lookup(clang::CXXRecordDecl* record); + + RecordInfo* Lookup(const clang::CXXRecordDecl* record) { + return Lookup(const_cast(record)); + } + + RecordInfo* Lookup(clang::DeclContext* decl) { + return Lookup(clang::dyn_cast(decl)); + } + + RecordInfo* Lookup(const clang::Type* type) { + return Lookup(type->getAsCXXRecordDecl()); + } + + RecordInfo* Lookup(const clang::QualType& type) { + return Lookup(type.getTypePtr()); + } + + ~RecordCache() { + for (Cache::iterator it = cache_.begin(); it != cache_.end(); ++it) { + if (!it->second.fields_) + continue; + for (RecordInfo::Fields::iterator fit = it->second.fields_->begin(); + fit != it->second.fields_->end(); + ++fit) { + fit->second.deleteEdge(); + } + } + } + + private: + typedef std::map Cache; + Cache cache_; +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_RECORD_INFO_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/TracingStatus.h b/chromium/tools/clang/blink_gc_plugin/TracingStatus.h new file mode 100644 index 00000000000..9eb1080de85 --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/TracingStatus.h @@ -0,0 +1,29 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_ +#define TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_ + +// TracingStatus is a three-point value ordered by unneeded < unknown < needed. +class TracingStatus { + public: + static TracingStatus Unneeded() { return kUnneeded; } + static TracingStatus Unknown() { return kUnknown; } + static TracingStatus Needed() { return kNeeded; } + bool IsUnneeded() const { return status_ == kUnneeded; } + bool IsUnknown() const { return status_ == kUnknown; } + bool IsNeeded() const { return status_ == kNeeded; } + TracingStatus LUB(const TracingStatus& other) const { + return status_ > other.status_ ? status_ : other.status_; + } + bool operator==(const TracingStatus& other) const { + return status_ == other.status_; + } + private: + enum Status { kUnneeded, kUnknown, kNeeded }; + TracingStatus(Status status) : status_(status) {} + Status status_; +}; + +#endif // TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_ diff --git a/chromium/tools/clang/blink_gc_plugin/process-graph.py b/chromium/tools/clang/blink_gc_plugin/process-graph.py new file mode 100755 index 00000000000..2bff96f76ad --- /dev/null +++ b/chromium/tools/clang/blink_gc_plugin/process-graph.py @@ -0,0 +1,464 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse, os, sys, json, subprocess, pickle, StringIO + +parser = argparse.ArgumentParser( + description = + "Process the Blink points-to graph generated by the Blink GC plugin.") + +parser.add_argument( + '-', dest='use_stdin', action='store_true', + help='Read JSON graph files from stdin') + +parser.add_argument( + '-c', '--detect-cycles', action='store_true', + help='Detect cycles containing GC roots') + +parser.add_argument( + '-s', '--print-stats', action='store_true', + help='Statistics about ref-counted and traced objects') + +parser.add_argument( + '-v', '--verbose', action='store_true', + help='Verbose output') + +parser.add_argument( + '--ignore-cycles', default=None, metavar='FILE', + help='File with cycles to ignore') + +parser.add_argument( + '--ignore-classes', nargs='*', default=[], metavar='CLASS', + help='Classes to ignore when detecting cycles') + +parser.add_argument( + '--pickle-graph', default=None, metavar='FILE', + help='File to read/save the graph from/to') + +parser.add_argument( + 'files', metavar='FILE_OR_DIR', nargs='*', default=[], + help='JSON graph files or directories containing them') + +# Command line args after parsing. +args = None + +# Map from node labels to nodes. +graph = {} + +# Set of root nodes. +roots = [] + +# List of cycles to ignore. +ignored_cycles = [] + +# Global flag to determine exit code. +global_reported_error = False + +def set_reported_error(value): + global global_reported_error + global_reported_error = value + +def reported_error(): + return global_reported_error + +def log(msg): + if args.verbose: + print msg + +global_inc_copy = 0 +def inc_copy(): + global global_inc_copy + global_inc_copy += 1 + +def get_node(name): + return graph.setdefault(name, Node(name)) + +ptr_types = ('raw', 'ref', 'mem') + +def inc_ptr(dst, ptr): + if ptr in ptr_types: + node = graph.get(dst) + if not node: return + node.counts[ptr] += 1 + +def add_counts(s1, s2): + for (k, v) in s2.iteritems(): + s1[k] += s2[k] + +# Representation of graph nodes. Basically a map of directed edges. +class Node: + def __init__(self, name): + self.name = name + self.edges = {} + self.reset() + def __repr__(self): + return "%s(%s) %s" % (self.name, self.visited, self.edges) + def update_node(self, decl): + # Currently we don't track any node info besides its edges. + pass + def update_edge(self, e): + new_edge = Edge(**e) + edge = self.edges.get(new_edge.key) + if edge: + # If an edge exist, its kind is the strongest of the two. + edge.kind = max(edge.kind, new_edge.kind) + else: + self.edges[new_edge.key] = new_edge + def super_edges(self): + return [ e for e in self.edges.itervalues() if e.is_super() ] + def subclass_edges(self): + return [ e for e in self.edges.itervalues() if e.is_subclass() ] + def reset(self): + self.cost = sys.maxint + self.visited = False + self.path = None + self.counts = {} + for ptr in ptr_types: + self.counts[ptr] = 0 + def update_counts(self): + for e in self.edges.itervalues(): + inc_ptr(e.dst, e.ptr) + +# Representation of directed graph edges. +class Edge: + def __init__(self, **decl): + self.src = decl['src'] + self.dst = decl['dst'] + self.lbl = decl['lbl'] + self.ptr = decl['ptr'] + self.kind = decl['kind'] # 0 = weak, 1 = strong, 2 = root + self.loc = decl['loc'] + # The label does not uniquely determine an edge from a node. We + # define the semi-unique key to be the concatenation of the + # label and dst name. This is sufficient to track the strongest + # edge to a particular type. For example, if the field A::m_f + # has type HashMap, Member> we will have a + # strong edge with key m_f#B from A to B. + self.key = '%s#%s' % (self.lbl, self.dst) + def __repr__(self): + return '%s (%s) => %s' % (self.src, self.lbl, self.dst) + def is_root(self): + return self.kind == 2 + def is_weak(self): + return self.kind == 0 + def keeps_alive(self): + return self.kind > 0 + def is_subclass(self): + return self.lbl.startswith('') + def is_super(self): + return self.lbl.startswith('') + +def parse_file(filename): + obj = json.load(open(filename)) + return obj + +def build_graphs_in_dir(dirname): + # TODO: Use plateform independent code, eg, os.walk + files = subprocess.check_output( + ['find', dirname, '-name', '*.graph.json']).split('\n') + log("Found %d files" % len(files)) + for f in files: + f.strip() + if len(f) < 1: + continue + build_graph(f) + +def build_graph(filename): + for decl in parse_file(filename): + if decl.has_key('name'): + # Add/update a node entry + name = decl['name'] + node = get_node(name) + node.update_node(decl) + else: + # Add/update an edge entry + name = decl['src'] + node = get_node(name) + node.update_edge(decl) + +# Copy all non-weak edges from super classes to their subclasses. +# This causes all fields of a super to be considered fields of a +# derived class without tranitively relating derived classes with +# each other. For example, if B <: A, C <: A, and for some D, D => B, +# we don't want that to entail that D => C. +def copy_super_edges(edge): + if edge.is_weak() or not edge.is_super(): + return + inc_copy() + # Make the super-class edge weak (prohibits processing twice). + edge.kind = 0 + # If the super class is not in our graph exit early. + super_node = graph.get(edge.dst) + if super_node is None: return + # Recursively copy all super-class edges. + for e in super_node.super_edges(): + copy_super_edges(e) + # Copy strong super-class edges (ignoring sub-class edges) to the sub class. + sub_node = graph[edge.src] + for e in super_node.edges.itervalues(): + if e.keeps_alive() and not e.is_subclass(): + new_edge = Edge( + src = sub_node.name, + dst = e.dst, + lbl = '%s <: %s' % (super_node.name, e.lbl), + ptr = e.ptr, + kind = e.kind, + loc = e.loc, + ) + sub_node.edges[new_edge.key] = new_edge + # Add a strong sub-class edge. + sub_edge = Edge( + src = super_node.name, + dst = sub_node.name, + lbl = '', + ptr = edge.ptr, + kind = 1, + loc = edge.loc, + ) + super_node.edges[sub_edge.key] = sub_edge + +def complete_graph(): + for node in graph.itervalues(): + for edge in node.super_edges(): + copy_super_edges(edge) + for edge in node.edges.itervalues(): + if edge.is_root(): + roots.append(edge) + log("Copied edges down edges for %d graph nodes" % global_inc_copy) + +def reset_graph(): + for n in graph.itervalues(): + n.reset() + +def shortest_path(start, end): + start.cost = 0 + minlist = [start] + while len(minlist) > 0: + minlist.sort(key=lambda n: -n.cost) + current = minlist.pop() + current.visited = True + if current == end or current.cost >= end.cost + 1: + return + for e in current.edges.itervalues(): + if not e.keeps_alive(): + continue + dst = graph.get(e.dst) + if dst is None or dst.visited: + continue + if current.cost < dst.cost: + dst.cost = current.cost + 1 + dst.path = e + minlist.append(dst) + +def detect_cycles(): + for root_edge in roots: + reset_graph() + # Mark ignored classes as already visited + for ignore in args.ignore_classes: + name = ignore.find("::") > 0 and ignore or ("WebCore::" + ignore) + node = graph.get(name) + if node: + node.visited = True + src = graph[root_edge.src] + dst = graph.get(root_edge.dst) + if src.visited: + continue + if root_edge.dst == "WTF::String": + continue + if dst is None: + print "\nPersistent root to incomplete destination object:" + print root_edge + set_reported_error(True) + continue + # Find the shortest path from the root target (dst) to its host (src) + shortest_path(dst, src) + if src.cost < sys.maxint: + report_cycle(root_edge) + +def is_ignored_cycle(cycle): + for block in ignored_cycles: + if block_match(cycle, block): + return True + +def block_match(b1, b2): + if len(b1) != len(b2): + return False + for (l1, l2) in zip(b1, b2): + if l1 != l2: + return False + return True + +def report_cycle(root_edge): + dst = graph[root_edge.dst] + path = [] + edge = root_edge + dst.path = None + while edge: + path.append(edge) + edge = graph[edge.src].path + path.append(root_edge) + path.reverse() + # Find the max loc length for pretty printing. + max_loc = 0 + for p in path: + if len(p.loc) > max_loc: + max_loc = len(p.loc) + out = StringIO.StringIO() + for p in path[:-1]: + print >>out, (p.loc + ':').ljust(max_loc + 1), p + sout = out.getvalue() + if not is_ignored_cycle(sout): + print "\nFound a potentially leaking cycle starting from a GC root:\n", sout + set_reported_error(True) + +def load_graph(): + global graph + global roots + log("Reading graph from pickled file: " + args.pickle_graph) + dump = pickle.load(open(args.pickle_graph, 'rb')) + graph = dump[0] + roots = dump[1] + +def save_graph(): + log("Saving graph to pickle file: " + args.pickle_graph) + dump = (graph, roots) + pickle.dump(dump, open(args.pickle_graph, 'wb')) + +def read_ignored_cycles(): + global ignored_cycles + if not args.ignore_cycles: + return + log("Reading ignored cycles from file: " + args.ignore_cycles) + block = [] + for l in open(args.ignore_cycles): + line = l.strip() + if not line or line.startswith('Found'): + if len(block) > 0: + ignored_cycles.append(block) + block = [] + else: + block += l + if len(block) > 0: + ignored_cycles.append(block) + +gc_bases = ( + 'WebCore::GarbageCollected', + 'WebCore::GarbageCollectedFinalized', + 'WebCore::GarbageCollectedMixin', +) +ref_bases = ( + 'WTF::RefCounted', + 'WTF::ThreadSafeRefCounted', +) +gcref_bases = ( + 'WebCore::RefCountedGarbageCollected', + 'WebCore::ThreadSafeRefCountedGarbageCollected', +) +ref_mixins = ( + 'WebCore::EventTarget', + 'WebCore::EventTargetWithInlineData', + 'WebCore::ActiveDOMObject', +) + +def print_stats(): + gcref_managed = [] + ref_managed = [] + gc_managed = [] + hierarchies = [] + + for node in graph.itervalues(): + node.update_counts() + for sup in node.super_edges(): + if sup.dst in gcref_bases: + gcref_managed.append(node) + elif sup.dst in ref_bases: + ref_managed.append(node) + elif sup.dst in gc_bases: + gc_managed.append(node) + + groups = [("GC manged ", gc_managed), + ("ref counted ", ref_managed), + ("in transition", gcref_managed)] + total = sum([len(g) for (s,g) in groups]) + for (s, g) in groups: + percent = len(g) * 100 / total + print "%2d%% is %s (%d hierarchies)" % (percent, s, len(g)) + + for base in gcref_managed: + stats = dict({ 'classes': 0, 'ref-mixins': 0 }) + for ptr in ptr_types: stats[ptr] = 0 + hierarchy_stats(base, stats) + hierarchies.append((base, stats)) + + print "\nHierarchies in transition (RefCountedGarbageCollected):" + hierarchies.sort(key=lambda (n,s): -s['classes']) + for (node, stats) in hierarchies: + total = stats['mem'] + stats['ref'] + stats['raw'] + print ( + "%s %3d%% of %-30s: %3d cls, %3d mem, %3d ref, %3d raw, %3d ref-mixins" % + (stats['ref'] == 0 and stats['ref-mixins'] == 0 and "*" or " ", + total == 0 and 100 or stats['mem'] * 100 / total, + node.name.replace('WebCore::', ''), + stats['classes'], + stats['mem'], + stats['ref'], + stats['raw'], + stats['ref-mixins'], + )) + +def hierarchy_stats(node, stats): + if not node: return + stats['classes'] += 1 + add_counts(stats, node.counts) + for edge in node.super_edges(): + if edge.dst in ref_mixins: + stats['ref-mixins'] += 1 + for edge in node.subclass_edges(): + hierarchy_stats(graph.get(edge.dst), stats) + +def main(): + global args + args = parser.parse_args() + if not (args.detect_cycles or args.print_stats): + print "Please select an operation to perform (eg, -c to detect cycles)" + parser.print_help() + return 1 + if args.pickle_graph and os.path.isfile(args.pickle_graph): + load_graph() + else: + if args.use_stdin: + log("Reading files from stdin") + for f in sys.stdin: + build_graph(f.strip()) + else: + log("Reading files and directories from command line") + if len(args.files) == 0: + print "Please provide files or directores for building the graph" + parser.print_help() + return 1 + for f in args.files: + if os.path.isdir(f): + log("Building graph from files in directory: " + f) + build_graphs_in_dir(f) + else: + log("Building graph from file: " + f) + build_graph(f) + log("Completing graph construction (%d graph nodes)" % len(graph)) + complete_graph() + if args.pickle_graph: + save_graph() + if args.detect_cycles: + read_ignored_cycles() + log("Detecting cycles containg GC roots") + detect_cycles() + if args.print_stats: + log("Printing statistics") + print_stats() + if reported_error(): + return 1 + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/chromium/tools/clang/plugins/ChromeClassTester.cpp b/chromium/tools/clang/plugins/ChromeClassTester.cpp index e44e7da7e50..5ce04e557f3 100644 --- a/chromium/tools/clang/plugins/ChromeClassTester.cpp +++ b/chromium/tools/clang/plugins/ChromeClassTester.cpp @@ -36,11 +36,9 @@ bool ends_with(const std::string& one, const std::string& two) { } // namespace -ChromeClassTester::ChromeClassTester(CompilerInstance& instance, - bool check_url_directory) +ChromeClassTester::ChromeClassTester(CompilerInstance& instance) : instance_(instance), - diagnostic_(instance.getDiagnostics()), - check_url_directory_(check_url_directory) { + diagnostic_(instance.getDiagnostics()) { BuildBannedLists(); } @@ -93,6 +91,16 @@ void ChromeClassTester::CheckTag(TagDecl* tag) { return; CheckChromeClass(record_location, record); + } else if (EnumDecl* enum_decl = dyn_cast(tag)) { + SourceLocation enum_location = enum_decl->getInnerLocStart(); + if (InBannedDirectory(enum_location)) + return; + + std::string base_name = enum_decl->getNameAsString(); + if (IsIgnoredType(base_name)) + return; + + CheckChromeEnum(enum_location, enum_decl); } } @@ -102,11 +110,11 @@ void ChromeClassTester::emitWarning(SourceLocation loc, std::string err; err = "[chromium-style] "; err += raw_error; - DiagnosticsEngine::Level level = + DiagnosticIDs::Level level = diagnostic().getWarningsAsErrors() ? - DiagnosticsEngine::Error : - DiagnosticsEngine::Warning; - unsigned id = diagnostic().getCustomDiagID(level, err); + DiagnosticIDs::Error : + DiagnosticIDs::Warning; + unsigned id = diagnostic().getDiagnosticIDs()->getCustomDiagID(level, err); DiagnosticBuilder builder = diagnostic().Report(full, id); } @@ -140,7 +148,6 @@ bool ChromeClassTester::InImplementationFile(SourceLocation record_location) { void ChromeClassTester::BuildBannedLists() { banned_namespaces_.push_back("std"); banned_namespaces_.push_back("__gnu_cxx"); - banned_namespaces_.push_back("WebTestRunner"); // We're in the process of renaming WebKit to blink. // TODO(abarth): Remove WebKit once the rename is complete. @@ -161,9 +168,6 @@ void ChromeClassTester::BuildBannedLists() { banned_directories_.push_back("icu4c/"); banned_directories_.push_back("frameworks/"); - if (!check_url_directory_) - banned_directories_.push_back("url/"); - // Don't check autogenerated headers. // Make puts them below $(builddir_name)/.../gen and geni. // Ninja puts them below OUTPUT_DIR/.../gen @@ -201,6 +205,9 @@ void ChromeClassTester::BuildBannedLists() { // non-pod class member. Probably harmless. ignored_record_names_.insert("MockTransaction"); + // Enum type with _LAST members where _LAST doesn't mean last enum value. + ignored_record_names_.insert("ServerFieldType"); + // Used heavily in ui_unittests and once in views_unittests. Fixing this // isn't worth the overhead of an additional library. ignored_record_names_.insert("TestAnimationDelegate"); @@ -212,6 +219,9 @@ void ChromeClassTester::BuildBannedLists() { // Measured performance improvement on cc_perftests. See // https://codereview.chromium.org/11299290/ ignored_record_names_.insert("QuadF"); + + // Enum type with _LAST members where _LAST doesn't mean last enum value. + ignored_record_names_.insert("ViewID"); } std::string ChromeClassTester::GetNamespaceImpl(const DeclContext* context, diff --git a/chromium/tools/clang/plugins/ChromeClassTester.h b/chromium/tools/clang/plugins/ChromeClassTester.h index 541341de539..6bd19a629a8 100644 --- a/chromium/tools/clang/plugins/ChromeClassTester.h +++ b/chromium/tools/clang/plugins/ChromeClassTester.h @@ -16,8 +16,7 @@ // headers to subclasses which implement CheckChromeClass(). class ChromeClassTester : public clang::ASTConsumer { public: - explicit ChromeClassTester(clang::CompilerInstance& instance, - bool check_url_directory); + explicit ChromeClassTester(clang::CompilerInstance& instance); virtual ~ChromeClassTester(); // clang::ASTConsumer: @@ -55,6 +54,12 @@ class ChromeClassTester : public clang::ASTConsumer { virtual void CheckChromeClass(clang::SourceLocation record_location, clang::CXXRecordDecl* record) = 0; + // Filtered versions of enum type that are only called with things defined + // in chrome header files. + virtual void CheckChromeEnum(clang::SourceLocation enum_location, + clang::EnumDecl* enum_decl) { + } + // Utility methods used for filtering out non-chrome classes (and ones we // deliberately ignore) in HandleTagDeclDefinition(). std::string GetNamespaceImpl(const clang::DeclContext* context, @@ -80,9 +85,6 @@ class ChromeClassTester : public clang::ASTConsumer { // List of decls to check once the current top-level decl is parsed. std::vector pending_class_decls_; - - // TODO(tfarina): Remove once url/ directory compiles without warnings. - bool check_url_directory_; }; #endif // TOOLS_CLANG_PLUGINS_CHROMECLASSTESTER_H_ diff --git a/chromium/tools/clang/plugins/FindBadConstructs.cpp b/chromium/tools/clang/plugins/FindBadConstructs.cpp deleted file mode 100644 index bdc497f64de..00000000000 --- a/chromium/tools/clang/plugins/FindBadConstructs.cpp +++ /dev/null @@ -1,731 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This file defines a bunch of recurring problems in the Chromium C++ code. -// -// Checks that are implemented: -// - Constructors/Destructors should not be inlined if they are of a complex -// class type. -// - Missing "virtual" keywords on methods that should be virtual. -// - Non-annotated overriding virtual methods. -// - Virtual methods with nonempty implementations in their headers. -// - Classes that derive from base::RefCounted / base::RefCountedThreadSafe -// should have protected or private destructors. -// - WeakPtrFactory members that refer to their outer class should be the last -// member. - -#include "clang/AST/ASTConsumer.h" -#include "clang/AST/AST.h" -#include "clang/AST/Attr.h" -#include "clang/AST/CXXInheritance.h" -#include "clang/AST/TypeLoc.h" -#include "clang/Basic/SourceManager.h" -#include "clang/Frontend/CompilerInstance.h" -#include "clang/Frontend/FrontendPluginRegistry.h" -#include "clang/Lex/Lexer.h" -#include "llvm/Support/raw_ostream.h" - -#include "ChromeClassTester.h" - -using namespace clang; - -namespace { - -const char kMethodRequiresOverride[] = - "[chromium-style] Overriding method must be marked with OVERRIDE."; -const char kMethodRequiresVirtual[] = - "[chromium-style] Overriding method must have \"virtual\" keyword."; -const char kNoExplicitDtor[] = - "[chromium-style] Classes that are ref-counted should have explicit " - "destructors that are declared protected or private."; -const char kPublicDtor[] = - "[chromium-style] Classes that are ref-counted should have " - "destructors that are declared protected or private."; -const char kProtectedNonVirtualDtor[] = - "[chromium-style] Classes that are ref-counted and have non-private " - "destructors should declare their destructor virtual."; -const char kWeakPtrFactoryOrder[] = - "[chromium-style] WeakPtrFactory members which refer to their outer class " - "must be the last member in the outer class definition."; -const char kNoteInheritance[] = - "[chromium-style] %0 inherits from %1 here"; -const char kNoteImplicitDtor[] = - "[chromium-style] No explicit destructor for %0 defined"; -const char kNotePublicDtor[] = - "[chromium-style] Public destructor declared here"; -const char kNoteProtectedNonVirtualDtor[] = - "[chromium-style] Protected non-virtual destructor declared here"; - -bool TypeHasNonTrivialDtor(const Type* type) { - if (const CXXRecordDecl* cxx_r = type->getPointeeCXXRecordDecl()) - return cxx_r->hasTrivialDestructor(); - - return false; -} - -// Returns the underlying Type for |type| by expanding typedefs and removing -// any namespace qualifiers. This is similar to desugaring, except that for -// ElaboratedTypes, desugar will unwrap too much. -const Type* UnwrapType(const Type* type) { - if (const ElaboratedType* elaborated = dyn_cast(type)) - return UnwrapType(elaborated->getNamedType().getTypePtr()); - if (const TypedefType* typedefed = dyn_cast(type)) - return UnwrapType(typedefed->desugar().getTypePtr()); - return type; -} - -struct FindBadConstructsOptions { - FindBadConstructsOptions() : check_base_classes(false), - check_virtuals_in_implementations(true), - check_url_directory(false), - check_weak_ptr_factory_order(false) { - } - bool check_base_classes; - bool check_virtuals_in_implementations; - bool check_url_directory; - bool check_weak_ptr_factory_order; -}; - -// Searches for constructs that we know we don't want in the Chromium code base. -class FindBadConstructsConsumer : public ChromeClassTester { - public: - FindBadConstructsConsumer(CompilerInstance& instance, - const FindBadConstructsOptions& options) - : ChromeClassTester(instance, options.check_url_directory), - options_(options) { - // Register warning/error messages. - diag_method_requires_override_ = diagnostic().getCustomDiagID( - getErrorLevel(), kMethodRequiresOverride); - diag_method_requires_virtual_ = diagnostic().getCustomDiagID( - getErrorLevel(), kMethodRequiresVirtual); - diag_no_explicit_dtor_ = diagnostic().getCustomDiagID( - getErrorLevel(), kNoExplicitDtor); - diag_public_dtor_ = diagnostic().getCustomDiagID( - getErrorLevel(), kPublicDtor); - diag_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID( - getErrorLevel(), kProtectedNonVirtualDtor); - diag_weak_ptr_factory_order_ = diagnostic().getCustomDiagID( - getErrorLevel(), kWeakPtrFactoryOrder); - - // Registers notes to make it easier to interpret warnings. - diag_note_inheritance_ = diagnostic().getCustomDiagID( - DiagnosticsEngine::Note, kNoteInheritance); - diag_note_implicit_dtor_ = diagnostic().getCustomDiagID( - DiagnosticsEngine::Note, kNoteImplicitDtor); - diag_note_public_dtor_ = diagnostic().getCustomDiagID( - DiagnosticsEngine::Note, kNotePublicDtor); - diag_note_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID( - DiagnosticsEngine::Note, kNoteProtectedNonVirtualDtor); - } - - virtual void CheckChromeClass(SourceLocation record_location, - CXXRecordDecl* record) { - bool implementation_file = InImplementationFile(record_location); - - if (!implementation_file) { - // Only check for "heavy" constructors/destructors in header files; - // within implementation files, there is no performance cost. - CheckCtorDtorWeight(record_location, record); - } - - if (!implementation_file || options_.check_virtuals_in_implementations) { - bool warn_on_inline_bodies = !implementation_file; - - // Check that all virtual methods are marked accordingly with both - // virtual and OVERRIDE. - CheckVirtualMethods(record_location, record, warn_on_inline_bodies); - } - - CheckRefCountedDtors(record_location, record); - - if (options_.check_weak_ptr_factory_order) - CheckWeakPtrFactoryMembers(record_location, record); - } - - private: - // The type of problematic ref-counting pattern that was encountered. - enum RefcountIssue { - None, - ImplicitDestructor, - PublicDestructor - }; - - FindBadConstructsOptions options_; - - unsigned diag_method_requires_override_; - unsigned diag_method_requires_virtual_; - unsigned diag_no_explicit_dtor_; - unsigned diag_public_dtor_; - unsigned diag_protected_non_virtual_dtor_; - unsigned diag_weak_ptr_factory_order_; - unsigned diag_note_inheritance_; - unsigned diag_note_implicit_dtor_; - unsigned diag_note_public_dtor_; - unsigned diag_note_protected_non_virtual_dtor_; - - // Prints errors if the constructor/destructor weight is too heavy. - void CheckCtorDtorWeight(SourceLocation record_location, - CXXRecordDecl* record) { - // We don't handle anonymous structs. If this record doesn't have a - // name, it's of the form: - // - // struct { - // ... - // } name_; - if (record->getIdentifier() == NULL) - return; - - // Count the number of templated base classes as a feature of whether the - // destructor can be inlined. - int templated_base_classes = 0; - for (CXXRecordDecl::base_class_const_iterator it = record->bases_begin(); - it != record->bases_end(); ++it) { - if (it->getTypeSourceInfo()->getTypeLoc().getTypeLocClass() == - TypeLoc::TemplateSpecialization) { - ++templated_base_classes; - } - } - - // Count the number of trivial and non-trivial member variables. - int trivial_member = 0; - int non_trivial_member = 0; - int templated_non_trivial_member = 0; - for (RecordDecl::field_iterator it = record->field_begin(); - it != record->field_end(); ++it) { - CountType(it->getType().getTypePtr(), - &trivial_member, - &non_trivial_member, - &templated_non_trivial_member); - } - - // Check to see if we need to ban inlined/synthesized constructors. Note - // that the cutoffs here are kind of arbitrary. Scores over 10 break. - int dtor_score = 0; - // Deriving from a templated base class shouldn't be enough to trigger - // the ctor warning, but if you do *anything* else, it should. - // - // TODO(erg): This is motivated by templated base classes that don't have - // any data members. Somehow detect when templated base classes have data - // members and treat them differently. - dtor_score += templated_base_classes * 9; - // Instantiating a template is an insta-hit. - dtor_score += templated_non_trivial_member * 10; - // The fourth normal class member should trigger the warning. - dtor_score += non_trivial_member * 3; - - int ctor_score = dtor_score; - // You should be able to have 9 ints before we warn you. - ctor_score += trivial_member; - - if (ctor_score >= 10) { - if (!record->hasUserDeclaredConstructor()) { - emitWarning(record_location, - "Complex class/struct needs an explicit out-of-line " - "constructor."); - } else { - // Iterate across all the constructors in this file and yell if we - // find one that tries to be inline. - for (CXXRecordDecl::ctor_iterator it = record->ctor_begin(); - it != record->ctor_end(); ++it) { - if (it->hasInlineBody()) { - if (it->isCopyConstructor() && - !record->hasUserDeclaredCopyConstructor()) { - emitWarning(record_location, - "Complex class/struct needs an explicit out-of-line " - "copy constructor."); - } else { - emitWarning(it->getInnerLocStart(), - "Complex constructor has an inlined body."); - } - } - } - } - } - - // The destructor side is equivalent except that we don't check for - // trivial members; 20 ints don't need a destructor. - if (dtor_score >= 10 && !record->hasTrivialDestructor()) { - if (!record->hasUserDeclaredDestructor()) { - emitWarning( - record_location, - "Complex class/struct needs an explicit out-of-line " - "destructor."); - } else if (CXXDestructorDecl* dtor = record->getDestructor()) { - if (dtor->hasInlineBody()) { - emitWarning(dtor->getInnerLocStart(), - "Complex destructor has an inline body."); - } - } - } - } - - void CheckVirtualMethod(const CXXMethodDecl* method, - bool warn_on_inline_bodies) { - if (!method->isVirtual()) - return; - - if (!method->isVirtualAsWritten()) { - SourceLocation loc = method->getTypeSpecStartLoc(); - if (isa(method)) - loc = method->getInnerLocStart(); - SourceManager& manager = instance().getSourceManager(); - FullSourceLoc full_loc(loc, manager); - SourceLocation spelling_loc = manager.getSpellingLoc(loc); - diagnostic().Report(full_loc, diag_method_requires_virtual_) - << FixItHint::CreateInsertion(spelling_loc, "virtual "); - } - - // Virtual methods should not have inline definitions beyond "{}". This - // only matters for header files. - if (warn_on_inline_bodies && method->hasBody() && - method->hasInlineBody()) { - if (CompoundStmt* cs = dyn_cast(method->getBody())) { - if (cs->size()) { - emitWarning( - cs->getLBracLoc(), - "virtual methods with non-empty bodies shouldn't be " - "declared inline."); - } - } - } - } - - bool InTestingNamespace(const Decl* record) { - return GetNamespace(record).find("testing") != std::string::npos; - } - - bool IsMethodInBannedOrTestingNamespace(const CXXMethodDecl* method) { - if (InBannedNamespace(method)) - return true; - for (CXXMethodDecl::method_iterator i = method->begin_overridden_methods(); - i != method->end_overridden_methods(); - ++i) { - const CXXMethodDecl* overridden = *i; - if (IsMethodInBannedOrTestingNamespace(overridden) || - InTestingNamespace(overridden)) { - return true; - } - } - - return false; - } - - void CheckOverriddenMethod(const CXXMethodDecl* method) { - if (!method->size_overridden_methods() || method->getAttr()) - return; - - if (isa(method) || method->isPure()) - return; - - if (IsMethodInBannedOrTestingNamespace(method)) - return; - - SourceManager& manager = instance().getSourceManager(); - SourceRange type_info_range = - method->getTypeSourceInfo()->getTypeLoc().getSourceRange(); - FullSourceLoc loc(type_info_range.getBegin(), manager); - - // Build the FixIt insertion point after the end of the method definition, - // including any const-qualifiers and attributes, and before the opening - // of the l-curly-brace (if inline) or the semi-color (if a declaration). - SourceLocation spelling_end = - manager.getSpellingLoc(type_info_range.getEnd()); - if (spelling_end.isValid()) { - SourceLocation token_end = Lexer::getLocForEndOfToken( - spelling_end, 0, manager, LangOptions()); - diagnostic().Report(token_end, diag_method_requires_override_) - << FixItHint::CreateInsertion(token_end, " OVERRIDE"); - } else { - diagnostic().Report(loc, diag_method_requires_override_); - } - } - - // Makes sure there is a "virtual" keyword on virtual methods. - // - // Gmock objects trigger these for each MOCK_BLAH() macro used. So we have a - // trick to get around that. If a class has member variables whose types are - // in the "testing" namespace (which is how gmock works behind the scenes), - // there's a really high chance we won't care about these errors - void CheckVirtualMethods(SourceLocation record_location, - CXXRecordDecl* record, - bool warn_on_inline_bodies) { - for (CXXRecordDecl::field_iterator it = record->field_begin(); - it != record->field_end(); ++it) { - CXXRecordDecl* record_type = - it->getTypeSourceInfo()->getTypeLoc().getTypePtr()-> - getAsCXXRecordDecl(); - if (record_type) { - if (InTestingNamespace(record_type)) { - return; - } - } - } - - for (CXXRecordDecl::method_iterator it = record->method_begin(); - it != record->method_end(); ++it) { - if (it->isCopyAssignmentOperator() || isa(*it)) { - // Ignore constructors and assignment operators. - } else if (isa(*it) && - !record->hasUserDeclaredDestructor()) { - // Ignore non-user-declared destructors. - } else { - CheckVirtualMethod(*it, warn_on_inline_bodies); - CheckOverriddenMethod(*it); - } - } - } - - void CountType(const Type* type, - int* trivial_member, - int* non_trivial_member, - int* templated_non_trivial_member) { - switch (type->getTypeClass()) { - case Type::Record: { - // Simplifying; the whole class isn't trivial if the dtor is, but - // we use this as a signal about complexity. - if (TypeHasNonTrivialDtor(type)) - (*trivial_member)++; - else - (*non_trivial_member)++; - break; - } - case Type::TemplateSpecialization: { - TemplateName name = - dyn_cast(type)->getTemplateName(); - bool whitelisted_template = false; - - // HACK: I'm at a loss about how to get the syntax checker to get - // whether a template is exterened or not. For the first pass here, - // just do retarded string comparisons. - if (TemplateDecl* decl = name.getAsTemplateDecl()) { - std::string base_name = decl->getNameAsString(); - if (base_name == "basic_string") - whitelisted_template = true; - } - - if (whitelisted_template) - (*non_trivial_member)++; - else - (*templated_non_trivial_member)++; - break; - } - case Type::Elaborated: { - CountType( - dyn_cast(type)->getNamedType().getTypePtr(), - trivial_member, non_trivial_member, templated_non_trivial_member); - break; - } - case Type::Typedef: { - while (const TypedefType* TT = dyn_cast(type)) { - type = TT->getDecl()->getUnderlyingType().getTypePtr(); - } - CountType(type, trivial_member, non_trivial_member, - templated_non_trivial_member); - break; - } - default: { - // Stupid assumption: anything we see that isn't the above is one of - // the 20 integer types. - (*trivial_member)++; - break; - } - } - } - - // Check |record| for issues that are problematic for ref-counted types. - // Note that |record| may not be a ref-counted type, but a base class for - // a type that is. - // If there are issues, update |loc| with the SourceLocation of the issue - // and returns appropriately, or returns None if there are no issues. - static RefcountIssue CheckRecordForRefcountIssue( - const CXXRecordDecl* record, - SourceLocation &loc) { - if (!record->hasUserDeclaredDestructor()) { - loc = record->getLocation(); - return ImplicitDestructor; - } - - if (CXXDestructorDecl* dtor = record->getDestructor()) { - if (dtor->getAccess() == AS_public) { - loc = dtor->getInnerLocStart(); - return PublicDestructor; - } - } - - return None; - } - - // Adds either a warning or error, based on the current handling of - // -Werror. - DiagnosticsEngine::Level getErrorLevel() { - return diagnostic().getWarningsAsErrors() ? - DiagnosticsEngine::Error : DiagnosticsEngine::Warning; - } - - // Returns true if |base| specifies one of the Chromium reference counted - // classes (base::RefCounted / base::RefCountedThreadSafe). - static bool IsRefCountedCallback(const CXXBaseSpecifier* base, - CXXBasePath& path, - void* user_data) { - FindBadConstructsConsumer* self = - static_cast(user_data); - - const TemplateSpecializationType* base_type = - dyn_cast( - UnwrapType(base->getType().getTypePtr())); - if (!base_type) { - // Base-most definition is not a template, so this cannot derive from - // base::RefCounted. However, it may still be possible to use with a - // scoped_refptr<> and support ref-counting, so this is not a perfect - // guarantee of safety. - return false; - } - - TemplateName name = base_type->getTemplateName(); - if (TemplateDecl* decl = name.getAsTemplateDecl()) { - std::string base_name = decl->getNameAsString(); - - // Check for both base::RefCounted and base::RefCountedThreadSafe. - if (base_name.compare(0, 10, "RefCounted") == 0 && - self->GetNamespace(decl) == "base") { - return true; - } - } - - return false; - } - - // Returns true if |base| specifies a class that has a public destructor, - // either explicitly or implicitly. - static bool HasPublicDtorCallback(const CXXBaseSpecifier* base, - CXXBasePath& path, - void* user_data) { - // Only examine paths that have public inheritance, as they are the - // only ones which will result in the destructor potentially being - // exposed. This check is largely redundant, as Chromium code should be - // exclusively using public inheritance. - if (path.Access != AS_public) - return false; - - CXXRecordDecl* record = dyn_cast( - base->getType()->getAs()->getDecl()); - SourceLocation unused; - return None != CheckRecordForRefcountIssue(record, unused); - } - - // Outputs a C++ inheritance chain as a diagnostic aid. - void PrintInheritanceChain(const CXXBasePath& path) { - for (CXXBasePath::const_iterator it = path.begin(); it != path.end(); - ++it) { - diagnostic().Report(it->Base->getLocStart(), diag_note_inheritance_) - << it->Class << it->Base->getType(); - } - } - - unsigned DiagnosticForIssue(RefcountIssue issue) { - switch (issue) { - case ImplicitDestructor: - return diag_no_explicit_dtor_; - case PublicDestructor: - return diag_public_dtor_; - case None: - assert(false && "Do not call DiagnosticForIssue with issue None"); - return 0; - } - assert(false); - return 0; - } - - // Check |record| to determine if it has any problematic refcounting - // issues and, if so, print them as warnings/errors based on the current - // value of getErrorLevel(). - // - // If |record| is a C++ class, and if it inherits from one of the Chromium - // ref-counting classes (base::RefCounted / base::RefCountedThreadSafe), - // ensure that there are no public destructors in the class hierarchy. This - // is to guard against accidentally stack-allocating a RefCounted class or - // sticking it in a non-ref-counted container (like scoped_ptr<>). - void CheckRefCountedDtors(SourceLocation record_location, - CXXRecordDecl* record) { - // Skip anonymous structs. - if (record->getIdentifier() == NULL) - return; - - // Determine if the current type is even ref-counted. - CXXBasePaths refcounted_path; - if (!record->lookupInBases( - &FindBadConstructsConsumer::IsRefCountedCallback, this, - refcounted_path)) { - return; // Class does not derive from a ref-counted base class. - } - - // Easy check: Check to see if the current type is problematic. - SourceLocation loc; - RefcountIssue issue = CheckRecordForRefcountIssue(record, loc); - if (issue != None) { - diagnostic().Report(loc, DiagnosticForIssue(issue)); - PrintInheritanceChain(refcounted_path.front()); - return; - } - if (CXXDestructorDecl* dtor = - refcounted_path.begin()->back().Class->getDestructor()) { - if (dtor->getAccess() == AS_protected && - !dtor->isVirtual()) { - loc = dtor->getInnerLocStart(); - diagnostic().Report(loc, diag_protected_non_virtual_dtor_); - return; - } - } - - // Long check: Check all possible base classes for problematic - // destructors. This checks for situations involving multiple - // inheritance, where the ref-counted class may be implementing an - // interface that has a public or implicit destructor. - // - // struct SomeInterface { - // virtual void DoFoo(); - // }; - // - // struct RefCountedInterface - // : public base::RefCounted, - // public SomeInterface { - // private: - // friend class base::Refcounted; - // virtual ~RefCountedInterface() {} - // }; - // - // While RefCountedInterface is "safe", in that its destructor is - // private, it's possible to do the following "unsafe" code: - // scoped_refptr some_class( - // new RefCountedInterface); - // // Calls SomeInterface::~SomeInterface(), which is unsafe. - // delete static_cast(some_class.get()); - if (!options_.check_base_classes) - return; - - // Find all public destructors. This will record the class hierarchy - // that leads to the public destructor in |dtor_paths|. - CXXBasePaths dtor_paths; - if (!record->lookupInBases( - &FindBadConstructsConsumer::HasPublicDtorCallback, this, - dtor_paths)) { - return; - } - - for (CXXBasePaths::const_paths_iterator it = dtor_paths.begin(); - it != dtor_paths.end(); ++it) { - // The record with the problem will always be the last record - // in the path, since it is the record that stopped the search. - const CXXRecordDecl* problem_record = dyn_cast( - it->back().Base->getType()->getAs()->getDecl()); - - issue = CheckRecordForRefcountIssue(problem_record, loc); - - if (issue == ImplicitDestructor) { - diagnostic().Report(record_location, diag_no_explicit_dtor_); - PrintInheritanceChain(refcounted_path.front()); - diagnostic().Report(loc, diag_note_implicit_dtor_) << problem_record; - PrintInheritanceChain(*it); - } else if (issue == PublicDestructor) { - diagnostic().Report(record_location, diag_public_dtor_); - PrintInheritanceChain(refcounted_path.front()); - diagnostic().Report(loc, diag_note_public_dtor_); - PrintInheritanceChain(*it); - } - } - } - - // Check for any problems with WeakPtrFactory class members. This currently - // only checks that any WeakPtrFactory member of T appears as the last - // data member in T. We could consider checking for bad uses of - // WeakPtrFactory to refer to other data members, but that would require - // looking at the initializer list in constructors to see what the factory - // points to. - // Note, if we later add other unrelated checks of data members, we should - // consider collapsing them in to one loop to avoid iterating over the data - // members more than once. - void CheckWeakPtrFactoryMembers(SourceLocation record_location, - CXXRecordDecl* record) { - // Skip anonymous structs. - if (record->getIdentifier() == NULL) - return; - - // Iterate through members of the class. - RecordDecl::field_iterator iter(record->field_begin()), - the_end(record->field_end()); - SourceLocation weak_ptr_factory_location; // Invalid initially. - for (; iter != the_end; ++iter) { - // If we enter the loop but have already seen a matching WeakPtrFactory, - // it means there is at least one member after the factory. - if (weak_ptr_factory_location.isValid()) { - diagnostic().Report(weak_ptr_factory_location, - diag_weak_ptr_factory_order_); - } - const TemplateSpecializationType* template_spec_type = - iter->getType().getTypePtr()->getAs(); - if (template_spec_type) { - const TemplateDecl* template_decl = - template_spec_type->getTemplateName().getAsTemplateDecl(); - if (template_decl && template_spec_type->getNumArgs() >= 1) { - if (template_decl->getNameAsString().compare("WeakPtrFactory") == 0 && - GetNamespace(template_decl) == "base") { - const TemplateArgument& arg = template_spec_type->getArg(0); - if (arg.getAsType().getTypePtr()->getAsCXXRecordDecl() == - record->getTypeForDecl()->getAsCXXRecordDecl()) { - weak_ptr_factory_location = iter->getLocation(); - } - } - } - } - } - } -}; - - -class FindBadConstructsAction : public PluginASTAction { - public: - FindBadConstructsAction() { - } - - protected: - // Overridden from PluginASTAction: - virtual ASTConsumer* CreateASTConsumer(CompilerInstance& instance, - llvm::StringRef ref) { - return new FindBadConstructsConsumer(instance, options_); - } - - virtual bool ParseArgs(const CompilerInstance& instance, - const std::vector& args) { - bool parsed = true; - - for (size_t i = 0; i < args.size() && parsed; ++i) { - if (args[i] == "skip-virtuals-in-implementations") { - // TODO(rsleevi): Remove this once http://crbug.com/115047 is fixed. - options_.check_virtuals_in_implementations = false; - } else if (args[i] == "check-base-classes") { - // TODO(rsleevi): Remove this once http://crbug.com/123295 is fixed. - options_.check_base_classes = true; - } else if (args[i] == "check-url-directory") { - // TODO(tfarina): Remove this once http://crbug.com/229660 is fixed. - options_.check_url_directory = true; - } else if (args[i] == "check-weak-ptr-factory-order") { - // TODO(dmichael): Remove this once http://crbug.com/303818 is fixed. - options_.check_weak_ptr_factory_order = true; - } else { - parsed = false; - llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n"; - } - } - - return parsed; - } - - private: - FindBadConstructsOptions options_; -}; - -} // namespace - -static FrontendPluginRegistry::Add -X("find-bad-constructs", "Finds bad C++ constructs"); diff --git a/chromium/tools/clang/plugins/FindBadConstructsAction.cpp b/chromium/tools/clang/plugins/FindBadConstructsAction.cpp new file mode 100644 index 00000000000..838590d7d38 --- /dev/null +++ b/chromium/tools/clang/plugins/FindBadConstructsAction.cpp @@ -0,0 +1,55 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "FindBadConstructsAction.h" + +#include "clang/Frontend/FrontendPluginRegistry.h" + +#include "FindBadConstructsConsumer.h" + +using namespace clang; + +namespace chrome_checker { + +FindBadConstructsAction::FindBadConstructsAction() { +} + +ASTConsumer* FindBadConstructsAction::CreateASTConsumer( + CompilerInstance& instance, + llvm::StringRef ref) { + return new FindBadConstructsConsumer(instance, options_); +} + +bool FindBadConstructsAction::ParseArgs(const CompilerInstance& instance, + const std::vector& args) { + bool parsed = true; + + for (size_t i = 0; i < args.size() && parsed; ++i) { + if (args[i] == "skip-virtuals-in-implementations") { + // TODO(rsleevi): Remove this once http://crbug.com/115047 is fixed. + options_.check_virtuals_in_implementations = false; + } else if (args[i] == "check-base-classes") { + // TODO(rsleevi): Remove this once http://crbug.com/123295 is fixed. + options_.check_base_classes = true; + } else if (args[i] == "check-weak-ptr-factory-order") { + // TODO(dmichael): Remove this once http://crbug.com/303818 is fixed. + options_.check_weak_ptr_factory_order = true; + } else if (args[i] == "check-enum-last-value") { + // TODO(tsepez): Enable this by default once http://crbug.com/356815 + // and http://crbug.com/356816 are fixed. + options_.check_enum_last_value = true; + } else { + parsed = false; + llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n"; + } + } + + return parsed; +} + +} // namespace chrome_checker + +static FrontendPluginRegistry::Add X( + "find-bad-constructs", + "Finds bad C++ constructs"); diff --git a/chromium/tools/clang/plugins/FindBadConstructsAction.h b/chromium/tools/clang/plugins/FindBadConstructsAction.h new file mode 100644 index 00000000000..887d339cca7 --- /dev/null +++ b/chromium/tools/clang/plugins/FindBadConstructsAction.h @@ -0,0 +1,32 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_ +#define TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_ + +#include "clang/Frontend/FrontendAction.h" + +#include "Options.h" + +namespace chrome_checker { + +class FindBadConstructsAction : public clang::PluginASTAction { + public: + FindBadConstructsAction(); + + protected: + // Overridden from PluginASTAction: + virtual clang::ASTConsumer* CreateASTConsumer( + clang::CompilerInstance& instance, + llvm::StringRef ref); + virtual bool ParseArgs(const clang::CompilerInstance& instance, + const std::vector& args); + + private: + Options options_; +}; + +} // namespace chrome_checker + +#endif // TOOLS_CLANG_PLUGINS_FINDBADCONSTRUCTIONS_ACTION_H_ diff --git a/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp b/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp new file mode 100644 index 00000000000..c4219a1ff23 --- /dev/null +++ b/chromium/tools/clang/plugins/FindBadConstructsConsumer.cpp @@ -0,0 +1,687 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "FindBadConstructsConsumer.h" + +#include "clang/Frontend/CompilerInstance.h" +#include "clang/Lex/Lexer.h" +#include "llvm/Support/raw_ostream.h" + +using namespace clang; + +namespace chrome_checker { + +namespace { + +const char kMethodRequiresOverride[] = + "[chromium-style] Overriding method must be marked with OVERRIDE."; +const char kMethodRequiresVirtual[] = + "[chromium-style] Overriding method must have \"virtual\" keyword."; +const char kNoExplicitDtor[] = + "[chromium-style] Classes that are ref-counted should have explicit " + "destructors that are declared protected or private."; +const char kPublicDtor[] = + "[chromium-style] Classes that are ref-counted should have " + "destructors that are declared protected or private."; +const char kProtectedNonVirtualDtor[] = + "[chromium-style] Classes that are ref-counted and have non-private " + "destructors should declare their destructor virtual."; +const char kWeakPtrFactoryOrder[] = + "[chromium-style] WeakPtrFactory members which refer to their outer class " + "must be the last member in the outer class definition."; +const char kBadLastEnumValue[] = + "[chromium-style] _LAST/Last constants of enum types must have the maximal " + "value for any constant of that type."; +const char kNoteInheritance[] = "[chromium-style] %0 inherits from %1 here"; +const char kNoteImplicitDtor[] = + "[chromium-style] No explicit destructor for %0 defined"; +const char kNotePublicDtor[] = + "[chromium-style] Public destructor declared here"; +const char kNoteProtectedNonVirtualDtor[] = + "[chromium-style] Protected non-virtual destructor declared here"; + +bool TypeHasNonTrivialDtor(const Type* type) { + if (const CXXRecordDecl* cxx_r = type->getPointeeCXXRecordDecl()) + return !cxx_r->hasTrivialDestructor(); + + return false; +} + +// Returns the underlying Type for |type| by expanding typedefs and removing +// any namespace qualifiers. This is similar to desugaring, except that for +// ElaboratedTypes, desugar will unwrap too much. +const Type* UnwrapType(const Type* type) { + if (const ElaboratedType* elaborated = dyn_cast(type)) + return UnwrapType(elaborated->getNamedType().getTypePtr()); + if (const TypedefType* typedefed = dyn_cast(type)) + return UnwrapType(typedefed->desugar().getTypePtr()); + return type; +} + +} // namespace + +FindBadConstructsConsumer::FindBadConstructsConsumer(CompilerInstance& instance, + const Options& options) + : ChromeClassTester(instance), options_(options) { + // Register warning/error messages. + diag_method_requires_override_ = + diagnostic().getCustomDiagID(getErrorLevel(), kMethodRequiresOverride); + diag_method_requires_virtual_ = + diagnostic().getCustomDiagID(getErrorLevel(), kMethodRequiresVirtual); + diag_no_explicit_dtor_ = + diagnostic().getCustomDiagID(getErrorLevel(), kNoExplicitDtor); + diag_public_dtor_ = + diagnostic().getCustomDiagID(getErrorLevel(), kPublicDtor); + diag_protected_non_virtual_dtor_ = + diagnostic().getCustomDiagID(getErrorLevel(), kProtectedNonVirtualDtor); + diag_weak_ptr_factory_order_ = + diagnostic().getCustomDiagID(getErrorLevel(), kWeakPtrFactoryOrder); + diag_bad_enum_last_value_ = + diagnostic().getCustomDiagID(getErrorLevel(), kBadLastEnumValue); + + // Registers notes to make it easier to interpret warnings. + diag_note_inheritance_ = + diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNoteInheritance); + diag_note_implicit_dtor_ = + diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNoteImplicitDtor); + diag_note_public_dtor_ = + diagnostic().getCustomDiagID(DiagnosticsEngine::Note, kNotePublicDtor); + diag_note_protected_non_virtual_dtor_ = diagnostic().getCustomDiagID( + DiagnosticsEngine::Note, kNoteProtectedNonVirtualDtor); +} + +void FindBadConstructsConsumer::CheckChromeClass(SourceLocation record_location, + CXXRecordDecl* record) { + bool implementation_file = InImplementationFile(record_location); + + if (!implementation_file) { + // Only check for "heavy" constructors/destructors in header files; + // within implementation files, there is no performance cost. + CheckCtorDtorWeight(record_location, record); + } + + if (!implementation_file || options_.check_virtuals_in_implementations) { + bool warn_on_inline_bodies = !implementation_file; + + // Check that all virtual methods are marked accordingly with both + // virtual and OVERRIDE. + CheckVirtualMethods(record_location, record, warn_on_inline_bodies); + } + + CheckRefCountedDtors(record_location, record); + + if (options_.check_weak_ptr_factory_order) + CheckWeakPtrFactoryMembers(record_location, record); +} + +void FindBadConstructsConsumer::CheckChromeEnum(SourceLocation enum_location, + EnumDecl* enum_decl) { + if (!options_.check_enum_last_value) + return; + + bool got_one = false; + bool is_signed = false; + llvm::APSInt max_so_far; + EnumDecl::enumerator_iterator iter; + for (iter = enum_decl->enumerator_begin(); + iter != enum_decl->enumerator_end(); + ++iter) { + llvm::APSInt current_value = iter->getInitVal(); + if (!got_one) { + max_so_far = current_value; + is_signed = current_value.isSigned(); + got_one = true; + } else { + if (is_signed != current_value.isSigned()) { + // This only happens in some cases when compiling C (not C++) files, + // so it is OK to bail out here. + return; + } + if (current_value > max_so_far) + max_so_far = current_value; + } + } + for (iter = enum_decl->enumerator_begin(); + iter != enum_decl->enumerator_end(); + ++iter) { + std::string name = iter->getNameAsString(); + if (((name.size() > 4 && name.compare(name.size() - 4, 4, "Last") == 0) || + (name.size() > 5 && name.compare(name.size() - 5, 5, "_LAST") == 0)) && + iter->getInitVal() < max_so_far) { + diagnostic().Report(iter->getLocation(), diag_bad_enum_last_value_); + } + } +} + +void FindBadConstructsConsumer::CheckCtorDtorWeight( + SourceLocation record_location, + CXXRecordDecl* record) { + // We don't handle anonymous structs. If this record doesn't have a + // name, it's of the form: + // + // struct { + // ... + // } name_; + if (record->getIdentifier() == NULL) + return; + + // Count the number of templated base classes as a feature of whether the + // destructor can be inlined. + int templated_base_classes = 0; + for (CXXRecordDecl::base_class_const_iterator it = record->bases_begin(); + it != record->bases_end(); + ++it) { + if (it->getTypeSourceInfo()->getTypeLoc().getTypeLocClass() == + TypeLoc::TemplateSpecialization) { + ++templated_base_classes; + } + } + + // Count the number of trivial and non-trivial member variables. + int trivial_member = 0; + int non_trivial_member = 0; + int templated_non_trivial_member = 0; + for (RecordDecl::field_iterator it = record->field_begin(); + it != record->field_end(); + ++it) { + CountType(it->getType().getTypePtr(), + &trivial_member, + &non_trivial_member, + &templated_non_trivial_member); + } + + // Check to see if we need to ban inlined/synthesized constructors. Note + // that the cutoffs here are kind of arbitrary. Scores over 10 break. + int dtor_score = 0; + // Deriving from a templated base class shouldn't be enough to trigger + // the ctor warning, but if you do *anything* else, it should. + // + // TODO(erg): This is motivated by templated base classes that don't have + // any data members. Somehow detect when templated base classes have data + // members and treat them differently. + dtor_score += templated_base_classes * 9; + // Instantiating a template is an insta-hit. + dtor_score += templated_non_trivial_member * 10; + // The fourth normal class member should trigger the warning. + dtor_score += non_trivial_member * 3; + + int ctor_score = dtor_score; + // You should be able to have 9 ints before we warn you. + ctor_score += trivial_member; + + if (ctor_score >= 10) { + if (!record->hasUserDeclaredConstructor()) { + emitWarning(record_location, + "Complex class/struct needs an explicit out-of-line " + "constructor."); + } else { + // Iterate across all the constructors in this file and yell if we + // find one that tries to be inline. + for (CXXRecordDecl::ctor_iterator it = record->ctor_begin(); + it != record->ctor_end(); + ++it) { + if (it->hasInlineBody()) { + if (it->isCopyConstructor() && + !record->hasUserDeclaredCopyConstructor()) { + emitWarning(record_location, + "Complex class/struct needs an explicit out-of-line " + "copy constructor."); + } else { + emitWarning(it->getInnerLocStart(), + "Complex constructor has an inlined body."); + } + } + } + } + } + + // The destructor side is equivalent except that we don't check for + // trivial members; 20 ints don't need a destructor. + if (dtor_score >= 10 && !record->hasTrivialDestructor()) { + if (!record->hasUserDeclaredDestructor()) { + emitWarning(record_location, + "Complex class/struct needs an explicit out-of-line " + "destructor."); + } else if (CXXDestructorDecl* dtor = record->getDestructor()) { + if (dtor->hasInlineBody()) { + emitWarning(dtor->getInnerLocStart(), + "Complex destructor has an inline body."); + } + } + } +} + +void FindBadConstructsConsumer::CheckVirtualMethod(const CXXMethodDecl* method, + bool warn_on_inline_bodies) { + if (!method->isVirtual()) + return; + + if (!method->isVirtualAsWritten()) { + SourceLocation loc = method->getTypeSpecStartLoc(); + if (isa(method)) + loc = method->getInnerLocStart(); + SourceManager& manager = instance().getSourceManager(); + FullSourceLoc full_loc(loc, manager); + SourceLocation spelling_loc = manager.getSpellingLoc(loc); + diagnostic().Report(full_loc, diag_method_requires_virtual_) + << FixItHint::CreateInsertion(spelling_loc, "virtual "); + } + + // Virtual methods should not have inline definitions beyond "{}". This + // only matters for header files. + if (warn_on_inline_bodies && method->hasBody() && method->hasInlineBody()) { + if (CompoundStmt* cs = dyn_cast(method->getBody())) { + if (cs->size()) { + emitWarning(cs->getLBracLoc(), + "virtual methods with non-empty bodies shouldn't be " + "declared inline."); + } + } + } +} + +bool FindBadConstructsConsumer::InTestingNamespace(const Decl* record) { + return GetNamespace(record).find("testing") != std::string::npos; +} + +bool FindBadConstructsConsumer::IsMethodInBannedOrTestingNamespace( + const CXXMethodDecl* method) { + if (InBannedNamespace(method)) + return true; + for (CXXMethodDecl::method_iterator i = method->begin_overridden_methods(); + i != method->end_overridden_methods(); + ++i) { + const CXXMethodDecl* overridden = *i; + if (IsMethodInBannedOrTestingNamespace(overridden) || + InTestingNamespace(overridden)) { + return true; + } + } + + return false; +} + +void FindBadConstructsConsumer::CheckOverriddenMethod( + const CXXMethodDecl* method) { + if (!method->size_overridden_methods() || method->getAttr()) + return; + + if (isa(method) || method->isPure()) + return; + + if (IsMethodInBannedOrTestingNamespace(method)) + return; + + SourceManager& manager = instance().getSourceManager(); + SourceRange type_info_range = + method->getTypeSourceInfo()->getTypeLoc().getSourceRange(); + FullSourceLoc loc(type_info_range.getBegin(), manager); + + // Build the FixIt insertion point after the end of the method definition, + // including any const-qualifiers and attributes, and before the opening + // of the l-curly-brace (if inline) or the semi-color (if a declaration). + SourceLocation spelling_end = + manager.getSpellingLoc(type_info_range.getEnd()); + if (spelling_end.isValid()) { + SourceLocation token_end = + Lexer::getLocForEndOfToken(spelling_end, 0, manager, LangOptions()); + diagnostic().Report(token_end, diag_method_requires_override_) + << FixItHint::CreateInsertion(token_end, " OVERRIDE"); + } else { + diagnostic().Report(loc, diag_method_requires_override_); + } +} + +// Makes sure there is a "virtual" keyword on virtual methods. +// +// Gmock objects trigger these for each MOCK_BLAH() macro used. So we have a +// trick to get around that. If a class has member variables whose types are +// in the "testing" namespace (which is how gmock works behind the scenes), +// there's a really high chance we won't care about these errors +void FindBadConstructsConsumer::CheckVirtualMethods( + SourceLocation record_location, + CXXRecordDecl* record, + bool warn_on_inline_bodies) { + for (CXXRecordDecl::field_iterator it = record->field_begin(); + it != record->field_end(); + ++it) { + CXXRecordDecl* record_type = it->getTypeSourceInfo() + ->getTypeLoc() + .getTypePtr() + ->getAsCXXRecordDecl(); + if (record_type) { + if (InTestingNamespace(record_type)) { + return; + } + } + } + + for (CXXRecordDecl::method_iterator it = record->method_begin(); + it != record->method_end(); + ++it) { + if (it->isCopyAssignmentOperator() || isa(*it)) { + // Ignore constructors and assignment operators. + } else if (isa(*it) && + !record->hasUserDeclaredDestructor()) { + // Ignore non-user-declared destructors. + } else { + CheckVirtualMethod(*it, warn_on_inline_bodies); + CheckOverriddenMethod(*it); + } + } +} + +void FindBadConstructsConsumer::CountType(const Type* type, + int* trivial_member, + int* non_trivial_member, + int* templated_non_trivial_member) { + switch (type->getTypeClass()) { + case Type::Record: { + // Simplifying; the whole class isn't trivial if the dtor is, but + // we use this as a signal about complexity. + if (TypeHasNonTrivialDtor(type)) + (*trivial_member)++; + else + (*non_trivial_member)++; + break; + } + case Type::TemplateSpecialization: { + TemplateName name = + dyn_cast(type)->getTemplateName(); + bool whitelisted_template = false; + + // HACK: I'm at a loss about how to get the syntax checker to get + // whether a template is exterened or not. For the first pass here, + // just do retarded string comparisons. + if (TemplateDecl* decl = name.getAsTemplateDecl()) { + std::string base_name = decl->getNameAsString(); + if (base_name == "basic_string") + whitelisted_template = true; + } + + if (whitelisted_template) + (*non_trivial_member)++; + else + (*templated_non_trivial_member)++; + break; + } + case Type::Elaborated: { + CountType(dyn_cast(type)->getNamedType().getTypePtr(), + trivial_member, + non_trivial_member, + templated_non_trivial_member); + break; + } + case Type::Typedef: { + while (const TypedefType* TT = dyn_cast(type)) { + type = TT->getDecl()->getUnderlyingType().getTypePtr(); + } + CountType(type, + trivial_member, + non_trivial_member, + templated_non_trivial_member); + break; + } + default: { + // Stupid assumption: anything we see that isn't the above is one of + // the 20 integer types. + (*trivial_member)++; + break; + } + } +} + +// Check |record| for issues that are problematic for ref-counted types. +// Note that |record| may not be a ref-counted type, but a base class for +// a type that is. +// If there are issues, update |loc| with the SourceLocation of the issue +// and returns appropriately, or returns None if there are no issues. +FindBadConstructsConsumer::RefcountIssue +FindBadConstructsConsumer::CheckRecordForRefcountIssue( + const CXXRecordDecl* record, + SourceLocation& loc) { + if (!record->hasUserDeclaredDestructor()) { + loc = record->getLocation(); + return ImplicitDestructor; + } + + if (CXXDestructorDecl* dtor = record->getDestructor()) { + if (dtor->getAccess() == AS_public) { + loc = dtor->getInnerLocStart(); + return PublicDestructor; + } + } + + return None; +} + +// Adds either a warning or error, based on the current handling of +// -Werror. +DiagnosticsEngine::Level FindBadConstructsConsumer::getErrorLevel() { + return diagnostic().getWarningsAsErrors() ? DiagnosticsEngine::Error + : DiagnosticsEngine::Warning; +} + +// Returns true if |base| specifies one of the Chromium reference counted +// classes (base::RefCounted / base::RefCountedThreadSafe). +bool FindBadConstructsConsumer::IsRefCountedCallback( + const CXXBaseSpecifier* base, + CXXBasePath& path, + void* user_data) { + FindBadConstructsConsumer* self = + static_cast(user_data); + + const TemplateSpecializationType* base_type = + dyn_cast( + UnwrapType(base->getType().getTypePtr())); + if (!base_type) { + // Base-most definition is not a template, so this cannot derive from + // base::RefCounted. However, it may still be possible to use with a + // scoped_refptr<> and support ref-counting, so this is not a perfect + // guarantee of safety. + return false; + } + + TemplateName name = base_type->getTemplateName(); + if (TemplateDecl* decl = name.getAsTemplateDecl()) { + std::string base_name = decl->getNameAsString(); + + // Check for both base::RefCounted and base::RefCountedThreadSafe. + if (base_name.compare(0, 10, "RefCounted") == 0 && + self->GetNamespace(decl) == "base") { + return true; + } + } + + return false; +} + +// Returns true if |base| specifies a class that has a public destructor, +// either explicitly or implicitly. +bool FindBadConstructsConsumer::HasPublicDtorCallback( + const CXXBaseSpecifier* base, + CXXBasePath& path, + void* user_data) { + // Only examine paths that have public inheritance, as they are the + // only ones which will result in the destructor potentially being + // exposed. This check is largely redundant, as Chromium code should be + // exclusively using public inheritance. + if (path.Access != AS_public) + return false; + + CXXRecordDecl* record = + dyn_cast(base->getType()->getAs()->getDecl()); + SourceLocation unused; + return None != CheckRecordForRefcountIssue(record, unused); +} + +// Outputs a C++ inheritance chain as a diagnostic aid. +void FindBadConstructsConsumer::PrintInheritanceChain(const CXXBasePath& path) { + for (CXXBasePath::const_iterator it = path.begin(); it != path.end(); ++it) { + diagnostic().Report(it->Base->getLocStart(), diag_note_inheritance_) + << it->Class << it->Base->getType(); + } +} + +unsigned FindBadConstructsConsumer::DiagnosticForIssue(RefcountIssue issue) { + switch (issue) { + case ImplicitDestructor: + return diag_no_explicit_dtor_; + case PublicDestructor: + return diag_public_dtor_; + case None: + assert(false && "Do not call DiagnosticForIssue with issue None"); + return 0; + } + assert(false); + return 0; +} + +// Check |record| to determine if it has any problematic refcounting +// issues and, if so, print them as warnings/errors based on the current +// value of getErrorLevel(). +// +// If |record| is a C++ class, and if it inherits from one of the Chromium +// ref-counting classes (base::RefCounted / base::RefCountedThreadSafe), +// ensure that there are no public destructors in the class hierarchy. This +// is to guard against accidentally stack-allocating a RefCounted class or +// sticking it in a non-ref-counted container (like scoped_ptr<>). +void FindBadConstructsConsumer::CheckRefCountedDtors( + SourceLocation record_location, + CXXRecordDecl* record) { + // Skip anonymous structs. + if (record->getIdentifier() == NULL) + return; + + // Determine if the current type is even ref-counted. + CXXBasePaths refcounted_path; + if (!record->lookupInBases(&FindBadConstructsConsumer::IsRefCountedCallback, + this, + refcounted_path)) { + return; // Class does not derive from a ref-counted base class. + } + + // Easy check: Check to see if the current type is problematic. + SourceLocation loc; + RefcountIssue issue = CheckRecordForRefcountIssue(record, loc); + if (issue != None) { + diagnostic().Report(loc, DiagnosticForIssue(issue)); + PrintInheritanceChain(refcounted_path.front()); + return; + } + if (CXXDestructorDecl* dtor = + refcounted_path.begin()->back().Class->getDestructor()) { + if (dtor->getAccess() == AS_protected && !dtor->isVirtual()) { + loc = dtor->getInnerLocStart(); + diagnostic().Report(loc, diag_protected_non_virtual_dtor_); + return; + } + } + + // Long check: Check all possible base classes for problematic + // destructors. This checks for situations involving multiple + // inheritance, where the ref-counted class may be implementing an + // interface that has a public or implicit destructor. + // + // struct SomeInterface { + // virtual void DoFoo(); + // }; + // + // struct RefCountedInterface + // : public base::RefCounted, + // public SomeInterface { + // private: + // friend class base::Refcounted; + // virtual ~RefCountedInterface() {} + // }; + // + // While RefCountedInterface is "safe", in that its destructor is + // private, it's possible to do the following "unsafe" code: + // scoped_refptr some_class( + // new RefCountedInterface); + // // Calls SomeInterface::~SomeInterface(), which is unsafe. + // delete static_cast(some_class.get()); + if (!options_.check_base_classes) + return; + + // Find all public destructors. This will record the class hierarchy + // that leads to the public destructor in |dtor_paths|. + CXXBasePaths dtor_paths; + if (!record->lookupInBases(&FindBadConstructsConsumer::HasPublicDtorCallback, + this, + dtor_paths)) { + return; + } + + for (CXXBasePaths::const_paths_iterator it = dtor_paths.begin(); + it != dtor_paths.end(); + ++it) { + // The record with the problem will always be the last record + // in the path, since it is the record that stopped the search. + const CXXRecordDecl* problem_record = dyn_cast( + it->back().Base->getType()->getAs()->getDecl()); + + issue = CheckRecordForRefcountIssue(problem_record, loc); + + if (issue == ImplicitDestructor) { + diagnostic().Report(record_location, diag_no_explicit_dtor_); + PrintInheritanceChain(refcounted_path.front()); + diagnostic().Report(loc, diag_note_implicit_dtor_) << problem_record; + PrintInheritanceChain(*it); + } else if (issue == PublicDestructor) { + diagnostic().Report(record_location, diag_public_dtor_); + PrintInheritanceChain(refcounted_path.front()); + diagnostic().Report(loc, diag_note_public_dtor_); + PrintInheritanceChain(*it); + } + } +} + +// Check for any problems with WeakPtrFactory class members. This currently +// only checks that any WeakPtrFactory member of T appears as the last +// data member in T. We could consider checking for bad uses of +// WeakPtrFactory to refer to other data members, but that would require +// looking at the initializer list in constructors to see what the factory +// points to. +// Note, if we later add other unrelated checks of data members, we should +// consider collapsing them in to one loop to avoid iterating over the data +// members more than once. +void FindBadConstructsConsumer::CheckWeakPtrFactoryMembers( + SourceLocation record_location, + CXXRecordDecl* record) { + // Skip anonymous structs. + if (record->getIdentifier() == NULL) + return; + + // Iterate through members of the class. + RecordDecl::field_iterator iter(record->field_begin()), + the_end(record->field_end()); + SourceLocation weak_ptr_factory_location; // Invalid initially. + for (; iter != the_end; ++iter) { + // If we enter the loop but have already seen a matching WeakPtrFactory, + // it means there is at least one member after the factory. + if (weak_ptr_factory_location.isValid()) { + diagnostic().Report(weak_ptr_factory_location, + diag_weak_ptr_factory_order_); + } + const TemplateSpecializationType* template_spec_type = + iter->getType().getTypePtr()->getAs(); + if (template_spec_type) { + const TemplateDecl* template_decl = + template_spec_type->getTemplateName().getAsTemplateDecl(); + if (template_decl && template_spec_type->getNumArgs() >= 1) { + if (template_decl->getNameAsString().compare("WeakPtrFactory") == 0 && + GetNamespace(template_decl) == "base") { + const TemplateArgument& arg = template_spec_type->getArg(0); + if (arg.getAsType().getTypePtr()->getAsCXXRecordDecl() == + record->getTypeForDecl()->getAsCXXRecordDecl()) { + weak_ptr_factory_location = iter->getLocation(); + } + } + } + } + } +} + +} // namespace chrome_checker diff --git a/chromium/tools/clang/plugins/FindBadConstructsConsumer.h b/chromium/tools/clang/plugins/FindBadConstructsConsumer.h new file mode 100644 index 00000000000..4e511939cb5 --- /dev/null +++ b/chromium/tools/clang/plugins/FindBadConstructsConsumer.h @@ -0,0 +1,100 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file defines a bunch of recurring problems in the Chromium C++ code. +// +// Checks that are implemented: +// - Constructors/Destructors should not be inlined if they are of a complex +// class type. +// - Missing "virtual" keywords on methods that should be virtual. +// - Non-annotated overriding virtual methods. +// - Virtual methods with nonempty implementations in their headers. +// - Classes that derive from base::RefCounted / base::RefCountedThreadSafe +// should have protected or private destructors. +// - WeakPtrFactory members that refer to their outer class should be the last +// member. +// - Enum types with a xxxx_LAST or xxxxLast const actually have that constant +// have the maximal value for that type. + +#include "clang/AST/AST.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/AST/Attr.h" +#include "clang/AST/CXXInheritance.h" +#include "clang/AST/TypeLoc.h" +#include "clang/Basic/SourceManager.h" + +#include "ChromeClassTester.h" +#include "Options.h" + +namespace chrome_checker { + +// Searches for constructs that we know we don't want in the Chromium code base. +class FindBadConstructsConsumer : public ChromeClassTester { + public: + FindBadConstructsConsumer(clang::CompilerInstance& instance, + const Options& options); + + // ChromeClassTester overrides: + virtual void CheckChromeClass(clang::SourceLocation record_location, + clang::CXXRecordDecl* record); + virtual void CheckChromeEnum(clang::SourceLocation enum_location, + clang::EnumDecl* enum_decl); + + private: + // The type of problematic ref-counting pattern that was encountered. + enum RefcountIssue { None, ImplicitDestructor, PublicDestructor }; + + void CheckCtorDtorWeight(clang::SourceLocation record_location, + clang::CXXRecordDecl* record); + + void CheckVirtualMethod(const clang::CXXMethodDecl* method, + bool warn_on_inline_bodies); + + bool InTestingNamespace(const clang::Decl* record); + bool IsMethodInBannedOrTestingNamespace(const clang::CXXMethodDecl* method); + + void CheckOverriddenMethod(const clang::CXXMethodDecl* method); + void CheckVirtualMethods(clang::SourceLocation record_location, + clang::CXXRecordDecl* record, + bool warn_on_inline_bodies); + + void CountType(const clang::Type* type, + int* trivial_member, + int* non_trivial_member, + int* templated_non_trivial_member); + + static RefcountIssue CheckRecordForRefcountIssue( + const clang::CXXRecordDecl* record, + clang::SourceLocation& loc); + clang::DiagnosticsEngine::Level getErrorLevel(); + static bool IsRefCountedCallback(const clang::CXXBaseSpecifier* base, + clang::CXXBasePath& path, + void* user_data); + static bool HasPublicDtorCallback(const clang::CXXBaseSpecifier* base, + clang::CXXBasePath& path, + void* user_data); + void PrintInheritanceChain(const clang::CXXBasePath& path); + unsigned DiagnosticForIssue(RefcountIssue issue); + void CheckRefCountedDtors(clang::SourceLocation record_location, + clang::CXXRecordDecl* record); + + void CheckWeakPtrFactoryMembers(clang::SourceLocation record_location, + clang::CXXRecordDecl* record); + + const Options options_; + + unsigned diag_method_requires_override_; + unsigned diag_method_requires_virtual_; + unsigned diag_no_explicit_dtor_; + unsigned diag_public_dtor_; + unsigned diag_protected_non_virtual_dtor_; + unsigned diag_weak_ptr_factory_order_; + unsigned diag_bad_enum_last_value_; + unsigned diag_note_inheritance_; + unsigned diag_note_implicit_dtor_; + unsigned diag_note_public_dtor_; + unsigned diag_note_protected_non_virtual_dtor_; +}; + +} // namespace chrome_checker diff --git a/chromium/tools/clang/plugins/Makefile b/chromium/tools/clang/plugins/Makefile index 0cfec71159c..98ce28bbbe4 100644 --- a/chromium/tools/clang/plugins/Makefile +++ b/chromium/tools/clang/plugins/Makefile @@ -15,5 +15,5 @@ SHARED_LIBRARY = 1 include $(CLANG_LEVEL)/Makefile ifeq ($(OS),Darwin) - LDFLAGS=-Wl,-undefined,dynamic_lookup + LDFLAGS+=-Wl,-undefined,dynamic_lookup endif diff --git a/chromium/tools/clang/plugins/Options.h b/chromium/tools/clang/plugins/Options.h new file mode 100644 index 00000000000..bb50124d57f --- /dev/null +++ b/chromium/tools/clang/plugins/Options.h @@ -0,0 +1,25 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TOOLS_CLANG_PLUGINS_OPTIONS_H_ +#define TOOLS_CLANG_PLUGINS_OPTIONS_H_ + +namespace chrome_checker { + +struct Options { + Options() + : check_base_classes(false), + check_virtuals_in_implementations(true), + check_weak_ptr_factory_order(false), + check_enum_last_value(false) {} + + bool check_base_classes; + bool check_virtuals_in_implementations; + bool check_weak_ptr_factory_order; + bool check_enum_last_value; +}; + +} // namespace chrome_checker + +#endif // TOOLS_CLANG_PLUGINS_OPTIONS_H_ diff --git a/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh b/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh new file mode 100755 index 00000000000..25c587294b0 --- /dev/null +++ b/chromium/tools/clang/scripts/blink_gc_plugin_flags.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This script returns the flags that should be passed to clang. + +THIS_ABS_DIR=$(cd $(dirname $0) && echo $PWD) +CLANG_LIB_PATH=$THIS_ABS_DIR/../../../third_party/llvm-build/Release+Asserts/lib + +if uname -s | grep -q Darwin; then + LIBSUFFIX=dylib +else + LIBSUFFIX=so +fi + +LIBNAME=\ +$(grep LIBRARYNAME "$THIS_ABS_DIR"/../blink_gc_plugin/Makefile \ + | cut -d ' ' -f 3) + +FLAGS="" +for arg in "$@"; do + if [[ "$arg" = "enable-oilpan=1" ]]; then + FLAGS="$FLAGS -Xclang -plugin-arg-blink-gc-plugin -Xclang enable-oilpan" + elif [[ "$arg" = "dump-graph=1" ]]; then + FLAGS="$FLAGS -Xclang -plugin-arg-blink-gc-plugin -Xclang dump-graph" + fi +done + +echo -Xclang -load -Xclang $CLANG_LIB_PATH/lib$LIBNAME.$LIBSUFFIX \ + -Xclang -add-plugin -Xclang blink-gc-plugin $FLAGS diff --git a/chromium/tools/clang/scripts/package.sh b/chromium/tools/clang/scripts/package.sh index 16b3c7ba500..0e05d903599 100755 --- a/chromium/tools/clang/scripts/package.sh +++ b/chromium/tools/clang/scripts/package.sh @@ -6,9 +6,49 @@ # This script will check out llvm and clang, and then package the results up # to a tgz file. +gcc_toolchain= + +# Parse command line options. +while [[ $# > 0 ]]; do + case $1 in + --gcc-toolchain) + shift + if [[ $# == 0 ]]; then + echo "--gcc-toolchain requires an argument." + exit 1 + fi + if [[ -x "$1/bin/gcc" ]]; then + gcc_toolchain=$1 + else + echo "Invalid --gcc-toolchain: '$1'." + echo "'$1/bin/gcc' does not appear to be valid." + exit 1 + fi + ;; + + --help) + echo "usage: $0 [--gcc-toolchain ]" + echo + echo "--gcc-toolchain: Set the prefix for which GCC version should" + echo " be used for building. For example, to use gcc in" + echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo" + echo + exit 1 + ;; + *) + echo "Unknown argument: '$1'." + echo "Use --help for help." + exit 1 + ;; + esac + shift +done + + THIS_DIR="$(dirname "${0}")" LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" LLVM_BOOTSTRAP_DIR="${THIS_DIR}/../../../third_party/llvm-bootstrap" +LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build" LLVM_BIN_DIR="${LLVM_BUILD_DIR}/Release+Asserts/bin" LLVM_LIB_DIR="${LLVM_BUILD_DIR}/Release+Asserts/lib" @@ -25,13 +65,18 @@ svn diff "${LLVM_DIR}/projects/compiler-rt" 2>&1 | tee -a buildlog.txt echo "Starting build" | tee -a buildlog.txt -set -ex +set -exu # Do a clobber build. rm -rf "${LLVM_BOOTSTRAP_DIR}" +rm -rf "${LLVM_BOOTSTRAP_INSTALL_DIR}" rm -rf "${LLVM_BUILD_DIR}" -"${THIS_DIR}"/update.sh --run-tests --bootstrap --force-local-build 2>&1 | \ - tee -a buildlog.txt +extra_flags= +if [[ -n "${gcc_toolchain}" ]]; then + extra_flags="--gcc-toolchain ${gcc_toolchain}" +fi +"${THIS_DIR}"/update.sh --bootstrap --force-local-build --run-tests \ + ${extra_flags} 2>&1 | tee -a buildlog.txt R=$("${LLVM_BIN_DIR}/clang" --version | \ sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') @@ -53,32 +98,62 @@ cp buildlog.txt $PDIR/ # Copy clang into pdir, symlink clang++ to it. cp "${LLVM_BIN_DIR}/clang" $PDIR/bin/ -(cd $PDIR/bin && ln -sf clang clang++ && cd -) +(cd $PDIR/bin && ln -sf clang clang++) cp "${LLVM_BIN_DIR}/llvm-symbolizer" $PDIR/bin/ +if [ "$(uname -s)" = "Darwin" ]; then + cp "${LLVM_BIN_DIR}/libc++.1.${SO_EXT}" $PDIR/bin/ + (cd $PDIR/bin && ln -sf libc++.1.dylib libc++.dylib) +fi + +# Copy libc++ headers. +if [ "$(uname -s)" = "Darwin" ]; then + mkdir $PDIR/include + cp -R "${LLVM_BOOTSTRAP_INSTALL_DIR}/include/c++" $PDIR/include +fi # Copy plugins. Some of the dylibs are pretty big, so copy only the ones we # care about. cp "${LLVM_LIB_DIR}/libFindBadConstructs.${SO_EXT}" $PDIR/lib -# Copy built-in headers (lib/clang/3.2/include). +BLINKGCPLUGIN_LIBNAME=\ +$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \ + | cut -d ' ' -f 3) +cp "${LLVM_LIB_DIR}/lib${BLINKGCPLUGIN_LIBNAME}.${SO_EXT}" $PDIR/lib + +if [[ -n "${gcc_toolchain}" ]]; then + # Copy the stdlibc++.so.6 we linked Clang against so it can run. + cp "${LLVM_LIB_DIR}/libstdc++.so.6" $PDIR/lib +fi + +# Copy built-in headers (lib/clang/3.x.y/include). # libcompiler-rt puts all kinds of libraries there too, but we want only some. if [ "$(uname -s)" = "Darwin" ]; then - # Keep only - # Release+Asserts/lib/clang/*/lib/darwin/libclang_rt.{asan,profile}_osx* + # Keep only the OSX (ASan and profile) and iossim (ASan) runtime libraries: + # Release+Asserts/lib/clang/*/lib/darwin/libclang_rt.{asan,profile}_* find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/darwin*' \ - ! -name '*asan_osx*' ! -name '*profile_osx*' | xargs rm - # Fix LC_ID_DYLIB for the ASan dynamic library to be relative to + ! -name '*asan_osx*' ! -name '*asan_iossim*' ! -name '*profile_osx*' | \ + xargs rm + # Fix LC_ID_DYLIB for the ASan dynamic libraries to be relative to # @executable_path. # TODO(glider): this is transitional. We'll need to fix the dylib name - # either in our build system, or in Clang. See also http://crbug.com/170629. - ASAN_DYLIB_NAME=libclang_rt.asan_osx_dynamic.dylib - ASAN_DYLIB=$(find "${LLVM_LIB_DIR}/clang" -type f -path "*${ASAN_DYLIB_NAME}") - install_name_tool -id @executable_path/${ASAN_DYLIB_NAME} "${ASAN_DYLIB}" + # either in our build system, or in Clang. See also http://crbug.com/344836. + ASAN_DYLIB_NAMES="libclang_rt.asan_osx_dynamic.dylib + libclang_rt.asan_iossim_dynamic.dylib" + for ASAN_DYLIB_NAME in $ASAN_DYLIB_NAMES + do + ASAN_DYLIB=$(find "${LLVM_LIB_DIR}/clang" \ + -type f -path "*${ASAN_DYLIB_NAME}") + install_name_tool -id @executable_path/${ASAN_DYLIB_NAME} "${ASAN_DYLIB}" + done else # Keep only - # Release+Asserts/lib/clang/*/lib/linux/libclang_rt.{[atm]san,profile,ubsan}-*.a + # Release+Asserts/lib/clang/*/lib/linux/libclang_rt.{[atm]san,san,ubsan,profile}-*.a + # , but not dfsan. find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/linux*' \ - ! -name '*[atm]san*' ! -name '*profile*' ! -name '*ubsan*' | xargs rm + ! -name '*[atm]san*' ! -name '*ubsan*' ! -name '*libclang_rt.san*' \ + ! -name '*profile*' | xargs rm + # Strip the debug info from the runtime libraries. + find "${LLVM_LIB_DIR}/clang" -type f -path '*lib/linux*' | xargs strip -g fi cp -R "${LLVM_LIB_DIR}/clang" $PDIR/lib diff --git a/chromium/tools/clang/scripts/repackage.sh b/chromium/tools/clang/scripts/repackage.sh new file mode 100755 index 00000000000..3f7f1602e8f --- /dev/null +++ b/chromium/tools/clang/scripts/repackage.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This script will check out llvm and clang, build a full package +# with the latest plugin revisions and then repackage an existing +# clang-package with the new plugin revisions. + +# The new package can be uploaded to replace the existing clang +# package at the same clang revision. + +THIS_DIR="$(dirname "${0}")" +LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build" +LLVM_TAR_DIR="${LLVM_BUILD_DIR}/Release+Asserts" +LLVM_BIN_DIR="${LLVM_TAR_DIR}/bin" +LLVM_LIB_DIR="${LLVM_TAR_DIR}/lib" + +set -eu + +if [ "$(uname -s)" = "Darwin" ]; then + PLATFORM=Mac + SO_EXT="dylib" +else + PLATFORM=Linux_x64 + SO_EXT="so" +fi + +# Build clang with the new plugin revisions. +"$THIS_DIR"/package.sh $@ + +R=$("${LLVM_BIN_DIR}/clang" --version | \ + sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') +PDIR=clang-$R + +if [ ! -f "$PDIR.tgz" ]; then + echo "Could not find package archive $PDIR.tgz generated by package.sh" + exit 1 +fi + +# We don't want to change the clang binary, so fetch the current clang +# package and add the plugin shared-libraries to the existing package. +rm -rf $LLVM_BUILD_DIR +"$THIS_DIR"/update.sh + +LIBNAME=$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \ + | cut -d ' ' -f 3) + +LIBFILE=lib$LIBNAME.$SO_EXT + +# Check that we are actually creating the plugin at a new revision. +if [ -f "$LLVM_LIB_DIR/$LIBFILE" ]; then + echo "The plugin revision $LIBNAME is already in the existing package." + exit 1 +fi + +cp $PDIR/lib/$LIBFILE "$LLVM_LIB_DIR/" +tar zcf ${PDIR}_repack.tgz -C "$LLVM_TAR_DIR" bin lib buildlog.txt + +echo The clang package has been repackaged with $LIBNAME +echo To upload, run: +echo gsutil cp -a public-read ${PDIR}_repack.tgz \ + gs://chromium-browser-clang/$PLATFORM/$PDIR.tgz diff --git a/chromium/tools/clang/scripts/update.py b/chromium/tools/clang/scripts/update.py index bdc781f715b..97b1d0c9314 100755 --- a/chromium/tools/clang/scripts/update.py +++ b/chromium/tools/clang/scripts/update.py @@ -3,31 +3,215 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -"""Windows can't run .sh files, so this is a small python wrapper around -update.sh. -""" +"""Windows can't run .sh files, so this is a Python implementation of +update.sh. This script should replace update.sh on all platforms eventually.""" import os +import re +import shutil import subprocess import sys +# Do NOT CHANGE this if you don't know what you're doing -- see +# https://code.google.com/p/chromium/wiki/UpdatingClang +# Reverting problematic clang rolls is safe, though. +# Note: this revision is only used for Windows. Other platforms use update.sh. +LLVM_WIN_REVISION = 'HEAD' + +# ASan on Windows is useful enough to use it even while the clang/win is still +# in bringup. Use a pinned revision to make it slightly more stable. +if (re.search(r'\b(asan)=1', os.environ.get('GYP_DEFINES', '')) and + not 'LLVM_FORCE_HEAD_REVISION' in os.environ): + LLVM_WIN_REVISION = '210586' + +# Path constants. (All of these should be absolute paths.) +THIS_DIR = os.path.abspath(os.path.dirname(__file__)) +CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..')) +LLVM_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm') +LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build', + 'Release+Asserts') +COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, '32bit-compiler-rt') +CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang') +COMPILER_RT_DIR = os.path.join(LLVM_DIR, 'projects', 'compiler-rt') +STAMP_FILE = os.path.join(LLVM_BUILD_DIR, 'cr_build_revision') + +LLVM_REPO_URL='https://llvm.org/svn/llvm-project' +if 'LLVM_REPO_URL' in os.environ: + LLVM_REPO_URL = os.environ['LLVM_REPO_URL'] + + +def ReadStampFile(): + """Return the contents of the stamp file, or '' if it doesn't exist.""" + try: + with open(STAMP_FILE, 'r') as f: + return f.read(); + except IOError: + return '' + + +def WriteStampFile(s): + """Write s to the stamp file.""" + if not os.path.exists(LLVM_BUILD_DIR): + os.makedirs(LLVM_BUILD_DIR) + with open(STAMP_FILE, 'w') as f: + f.write(s) + + +def DeleteFiles(dir, pattern): + """Delete all files in dir matching pattern.""" + n = 0 + regex = re.compile(r'^' + pattern + r'$') + for root, _, files in os.walk(dir): + for f in files: + if regex.match(f): + os.remove(os.path.join(root, f)) + n += 1 + return n + + +def ClobberChromiumBuildFiles(): + """Clobber Chomium build files.""" + print 'Clobbering Chromium build files...' + out_dir = os.path.join(CHROMIUM_DIR, 'out') + if os.path.isdir(out_dir): + shutil.rmtree(out_dir) + print 'Removed Chromium out dir: %s.' % (out_dir) + + +def RunCommand(command, tries=1): + """Run a command, possibly with multiple retries.""" + for i in range(0, tries): + print 'Running %s (try #%d)' % (str(command), i + 1) + if subprocess.call(command, shell=True) == 0: + return + print 'Failed.' + sys.exit(1) + +def CopyFile(src, dst): + """Copy a file from src to dst.""" + shutil.copy(src, dst) + print "Copying %s to %s" % (src, dst) + +def Checkout(name, url, dir): + """Checkout the SVN module at url into dir. Use name for the log message.""" + print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir) + RunCommand(['svn', 'checkout', '--force', + url + '@' + LLVM_WIN_REVISION, dir], tries=2) + + +vs_version = None +def GetVSVersion(): + global vs_version + if not vs_version: + # TODO(hans): Find a less hacky way to find the MSVS installation. + sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) + import gyp.MSVSVersion + # We request VS 2013 because Clang won't build with 2010, and 2013 will be + # the default for Chromium soon anyway. + vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013') + return vs_version + + +def UpdateClang(): + print 'Updating Clang to %s...' % (LLVM_WIN_REVISION) + if LLVM_WIN_REVISION != 'HEAD' and ReadStampFile() == LLVM_WIN_REVISION: + print 'Already up to date.' + return 0 + + ClobberChromiumBuildFiles() + + # Reset the stamp file in case the build is unsuccessful. + WriteStampFile('') + + Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR) + Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR) + Checkout('compiler-rt', LLVM_REPO_URL + '/compiler-rt/trunk', COMPILER_RT_DIR) + + if not os.path.exists(LLVM_BUILD_DIR): + os.makedirs(LLVM_BUILD_DIR) + os.chdir(LLVM_BUILD_DIR) + + if not re.search(r'cmake', os.environ['PATH'], flags=re.IGNORECASE): + # If CMake is not on the path, try looking in a standard location. + os.environ['PATH'] += os.pathsep + 'C:\\Program Files (x86)\\CMake 2.8\\bin' + + RunCommand(GetVSVersion().SetupScript('x64') + + ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release', + '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR]) + RunCommand(GetVSVersion().SetupScript('x64') + ['&&', 'ninja', 'all']) + + # Do an x86 build of compiler-rt to get the 32-bit ASan run-time. + # TODO(hans): Remove once the regular build above produces this. + if not os.path.exists(COMPILER_RT_BUILD_DIR): + os.makedirs(COMPILER_RT_BUILD_DIR) + os.chdir(COMPILER_RT_BUILD_DIR) + RunCommand(GetVSVersion().SetupScript('x86') + + ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release', + '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR]) + RunCommand(GetVSVersion().SetupScript('x86') + ['&&', 'ninja', 'compiler-rt']) + + # TODO(hans): Make this (and the .gypi file) version number independent. + asan_rt_lib_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'lib', 'clang', + '3.5.0', 'lib', 'windows') + asan_rt_lib_dst_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', + '3.5.0', 'lib', 'windows') + + if not os.path.exists(asan_rt_lib_dst_dir): + os.makedirs(asan_rt_lib_dst_dir) + for root, _, files in os.walk(asan_rt_lib_src_dir): + for f in files: + if re.match(r'^.*-i386\.lib$', f): + CopyFile(os.path.join(root, f), asan_rt_lib_dst_dir) + + CopyFile(os.path.join(asan_rt_lib_src_dir, '..', '..', 'asan_blacklist.txt'), + os.path.join(asan_rt_lib_dst_dir, '..', '..')) + + # Make an extra copy of the sanitizer headers, to be put on the include path + # of the fallback compiler. + sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', '3.5.0', + 'include', 'sanitizer') + aux_sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', + '3.5.0', 'include_sanitizer', + 'sanitizer') + if not os.path.exists(aux_sanitizer_include_dir): + os.makedirs(aux_sanitizer_include_dir) + for _, _, files in os.walk(sanitizer_include_dir): + for f in files: + CopyFile(os.path.join(sanitizer_include_dir, f), + aux_sanitizer_include_dir) + + WriteStampFile(LLVM_WIN_REVISION) + print 'Clang update was successful.' + return 0 + def main(): - if sys.platform in ['win32', 'cygwin']: + if not sys.platform in ['win32', 'cygwin']: + # For non-Windows, fall back to update.sh. + # TODO(hans): Make update.py replace update.sh completely. + + # This script is called by gclient. gclient opens its hooks subprocesses + # with (stdout=subprocess.PIPE, stderr=subprocess.STDOUT) and then does + # custom output processing that breaks printing '\r' characters for + # single-line updating status messages as printed by curl and wget. + # Work around this by setting stderr of the update.sh process to stdin (!): + # gclient doesn't redirect stdin, and while stdin itself is read-only, a + # dup()ed sys.stdin is writable, try + # fd2 = os.dup(sys.stdin.fileno()); os.write(fd2, 'hi') + # TODO: Fix gclient instead, http://crbug.com/95350 + return subprocess.call( + [os.path.join(os.path.dirname(__file__), 'update.sh')] + sys.argv[1:], + stderr=os.fdopen(os.dup(sys.stdin.fileno()))) + + if not re.search(r'\b(clang|asan)=1', os.environ.get('GYP_DEFINES', '')): + print 'Skipping Clang update (clang=1 was not set in GYP_DEFINES).' + return 0 + + if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')): + print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).' return 0 - # This script is called by gclient. gclient opens its hooks subprocesses with - # (stdout=subprocess.PIPE, stderr=subprocess.STDOUT) and then does custom - # output processing that breaks printing '\r' characters for single-line - # updating status messages as printed by curl and wget. - # Work around this by setting stderr of the update.sh process to stdin (!): - # gclient doesn't redirect stdin, and while stdin itself is read-only, a - # dup()ed sys.stdin is writable, try - # fd2 = os.dup(sys.stdin.fileno()); os.write(fd2, 'hi') - # TODO: Fix gclient instead, http://crbug.com/95350 - return subprocess.call( - [os.path.join(os.path.dirname(__file__), 'update.sh')] + sys.argv[1:], - stderr=os.fdopen(os.dup(sys.stdin.fileno()))) + return UpdateClang() if __name__ == '__main__': diff --git a/chromium/tools/clang/scripts/update.sh b/chromium/tools/clang/scripts/update.sh index aef39e80ed0..2beb4e39b28 100755 --- a/chromium/tools/clang/scripts/update.sh +++ b/chromium/tools/clang/scripts/update.sh @@ -8,48 +8,79 @@ # Do NOT CHANGE this if you don't know what you're doing -- see # https://code.google.com/p/chromium/wiki/UpdatingClang # Reverting problematic clang rolls is safe, though. -CLANG_REVISION=193323 +CLANG_REVISION=209387 THIS_DIR="$(dirname "${0}")" LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build" LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" +LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" CLANG_DIR="${LLVM_DIR}/tools/clang" CLANG_TOOLS_EXTRA_DIR="${CLANG_DIR}/tools/extra" COMPILER_RT_DIR="${LLVM_DIR}/projects/compiler-rt" +LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" +LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" ANDROID_NDK_DIR="${LLVM_DIR}/../android_tools/ndk" STAMP_FILE="${LLVM_BUILD_DIR}/cr_build_revision" +ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" +ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" + + +# Use both the clang revision and the plugin revisions to test for updates. +BLINKGCPLUGIN_REVISION=\ +$(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \ + | cut -d '_' -f 2) +CLANG_AND_PLUGINS_REVISION="${CLANG_REVISION}-${BLINKGCPLUGIN_REVISION}" + # ${A:-a} returns $A if it's set, a else. LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project} -# Die if any command dies. -set -e +if [[ -z "$GYP_DEFINES" ]]; then + GYP_DEFINES= +fi +if [[ -z "$GYP_GENERATORS" ]]; then + GYP_GENERATORS= +fi + + +# Die if any command dies, error on undefined variable expansions. +set -eu OS="$(uname -s)" # Parse command line options. +if_needed= force_local_build= -mac_only= run_tests= bootstrap= with_android=yes -chrome_tools="plugins" +chrome_tools="plugins blink_gc_plugin" +gcc_toolchain= if [[ "${OS}" = "Darwin" ]]; then with_android= fi +if [ "${OS}" = "FreeBSD" ]; then + MAKE=gmake +else + MAKE=make +fi while [[ $# > 0 ]]; do case $1 in --bootstrap) bootstrap=yes ;; + --if-needed) + if_needed=yes + ;; --force-local-build) force_local_build=yes ;; - --mac-only) - mac_only=yes + --print-revision) + echo $CLANG_REVISION + exit 0 ;; --run-tests) run_tests=yes @@ -65,55 +96,67 @@ while [[ $# > 0 ]]; do fi chrome_tools=$1 ;; + --gcc-toolchain) + shift + if [[ $# == 0 ]]; then + echo "--gcc-toolchain requires an argument." + exit 1 + fi + if [[ -x "$1/bin/gcc" ]]; then + gcc_toolchain=$1 + else + echo "Invalid --gcc-toolchain: '$1'." + echo "'$1/bin/gcc' does not appear to be valid." + exit 1 + fi + ;; + --help) - echo "usage: $0 [--force-local-build] [--mac-only] [--run-tests] " + echo "usage: $0 [--force-local-build] [--if-needed] [--run-tests] " echo "--bootstrap: First build clang with CC, then with itself." echo "--force-local-build: Don't try to download prebuilt binaries." - echo "--mac-only: Do initial download only on Mac systems." + echo "--if-needed: Download clang only if the script thinks it is needed." echo "--run-tests: Run tests after building. Only for local builds." + echo "--print-revision: Print current clang revision and exit." echo "--without-android: Don't build ASan Android runtime library." echo "--with-chrome-tools: Select which chrome tools to build." \ "Defaults to plugins." echo " Example: --with-chrome-tools 'plugins empty-string'" + echo "--gcc-toolchain: Set the prefix for which GCC version should" + echo " be used for building. For example, to use gcc in" + echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo" echo exit 1 ;; + *) + echo "Unknown argument: '$1'." + echo "Use --help for help." + exit 1 + ;; esac shift done -# --mac-only prevents the initial download on non-mac systems, but if clang has -# already been downloaded in the past, this script keeps it up to date even if -# --mac-only is passed in and the system isn't a mac. People who don't like this -# can just delete their third_party/llvm-build directory. -if [[ -n "$mac_only" ]] && [[ "${OS}" != "Darwin" ]] && - [[ ! ( "$GYP_DEFINES" =~ .*(clang|tsan|asan)=1.* ) ]] && - ! [[ -d "${LLVM_BUILD_DIR}" ]]; then - exit 0 +# Remove clang on bots where it was autoinstalled in r262025. +if [[ -f "${LLVM_BUILD_DIR}/autoinstall_stamp" ]]; then + echo Removing autoinstalled clang and clobbering + rm -rf "${LLVM_BUILD_DIR}" fi -# Xcode and clang don't get along when predictive compilation is enabled. -# http://crbug.com/96315 -if [[ "${OS}" = "Darwin" ]] && xcodebuild -version | grep -q 'Xcode 3.2' ; then - XCONF=com.apple.Xcode - if [[ "${GYP_GENERATORS}" != "make" ]] && \ - [ "$(defaults read "${XCONF}" EnablePredictiveCompilation)" != "0" ]; then - echo - echo " HEARKEN!" - echo "You're using Xcode3 and you have 'Predictive Compilation' enabled." - echo "This does not work well with clang (http://crbug.com/96315)." - echo "Disable it in Preferences->Building (lower right), or run" - echo " defaults write ${XCONF} EnablePredictiveCompilation -boolean NO" - echo "while Xcode is not running." - echo - fi - - SUB_VERSION=$(xcodebuild -version | sed -Ene 's/Xcode 3\.2\.([0-9]+)/\1/p') - if [[ "${SUB_VERSION}" < 6 ]]; then - echo - echo " YOUR LD IS BUGGY!" - echo "Please upgrade Xcode to at least 3.2.6." - echo +if [[ -n "$if_needed" ]]; then + if [[ "${OS}" == "Darwin" ]]; then + # clang is used on Mac. + true + elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then + # clang requested via $GYP_DEFINES. + true + elif [[ -d "${LLVM_BUILD_DIR}" ]]; then + # clang previously downloaded, remove third_party/llvm-build to prevent + # updating. + true + else + # clang wasn't needed, not doing anything. + exit 0 fi fi @@ -122,8 +165,9 @@ fi if [[ -f "${STAMP_FILE}" ]]; then PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}") if [[ -z "$force_local_build" ]] && \ - [[ "${PREVIOUSLY_BUILT_REVISON}" = "${CLANG_REVISION}" ]]; then - echo "Clang already at ${CLANG_REVISION}" + [[ "${PREVIOUSLY_BUILT_REVISON}" = \ + "${CLANG_AND_PLUGINS_REVISION}" ]]; then + echo "Clang already at ${CLANG_AND_PLUGINS_REVISION}" exit 0 fi fi @@ -131,31 +175,6 @@ fi rm -f "${STAMP_FILE}" -# Clobber build files. PCH files only work with the compiler that created them. -# We delete .o files to make sure all files are built with the new compiler. -echo "Clobbering build files" -MAKE_DIR="${THIS_DIR}/../../../out" -XCODEBUILD_DIR="${THIS_DIR}/../../../xcodebuild" -for DIR in "${XCODEBUILD_DIR}" "${MAKE_DIR}/Debug" "${MAKE_DIR}/Release"; do - if [[ -d "${DIR}" ]]; then - find "${DIR}" -name '*.o' -exec rm {} + - find "${DIR}" -name '*.o.d' -exec rm {} + - find "${DIR}" -name '*.gch' -exec rm {} + - find "${DIR}" -name '*.dylib' -exec rm -rf {} + - find "${DIR}" -name 'SharedPrecompiledHeaders' -exec rm -rf {} + - fi -done - -# Clobber NaCl toolchain stamp files, see http://crbug.com/159793 -if [[ -d "${MAKE_DIR}" ]]; then - find "${MAKE_DIR}" -name 'stamp.untar' -exec rm {} + -fi -if [[ "${OS}" = "Darwin" ]]; then - if [[ -d "${XCODEBUILD_DIR}" ]]; then - find "${XCODEBUILD_DIR}" -name 'stamp.untar' -exec rm {} + - fi -fi - if [[ -z "$force_local_build" ]]; then # Check if there's a prebuilt binary and if so just fetch that. That's faster, # and goma relies on having matching binary hashes on client and server too. @@ -183,7 +202,7 @@ if [[ -z "$force_local_build" ]]; then mkdir -p "${LLVM_BUILD_DIR}/Release+Asserts" tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}/Release+Asserts" echo clang "${CLANG_REVISION}" unpacked - echo "${CLANG_REVISION}" > "${STAMP_FILE}" + echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" rm -rf "${CDS_OUT_DIR}" exit 0 else @@ -215,21 +234,82 @@ echo Getting compiler-rt r"${CLANG_REVISION}" in "${COMPILER_RT_DIR}" svn co --force "${LLVM_REPO_URL}/compiler-rt/trunk@${CLANG_REVISION}" \ "${COMPILER_RT_DIR}" +# clang needs a libc++ checkout, else -stdlib=libc++ won't find includes +# (i.e. this is needed for bootstrap builds). +if [ "${OS}" = "Darwin" ]; then + echo Getting libc++ r"${CLANG_REVISION}" in "${LIBCXX_DIR}" + svn co --force "${LLVM_REPO_URL}/libcxx/trunk@${CLANG_REVISION}" \ + "${LIBCXX_DIR}" +fi + +# While we're bundling our own libc++ on OS X, we need to compile libc++abi +# into it too (since OS X 10.6 doesn't have libc++abi.dylib either). +if [ "${OS}" = "Darwin" ]; then + echo Getting libc++abi r"${CLANG_REVISION}" in "${LIBCXXABI_DIR}" + svn co --force "${LLVM_REPO_URL}/libcxxabi/trunk@${CLANG_REVISION}" \ + "${LIBCXXABI_DIR}" +fi + +# Apply patch for test failing with --disable-pthreads (llvm.org/PR11974) +pushd "${CLANG_DIR}" +svn revert test/Index/crash-recovery-modules.m +cat << 'EOF' | +--- third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (revision 202554) ++++ third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (working copy) +@@ -12,6 +12,8 @@ + + // REQUIRES: crash-recovery + // REQUIRES: shell ++// XFAIL: * ++// (PR11974) + + @import Crash; +EOF +patch -p4 +popd + # Echo all commands. set -x NUM_JOBS=3 if [[ "${OS}" = "Linux" ]]; then NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)" -elif [ "${OS}" = "Darwin" ]; then +elif [ "${OS}" = "Darwin" -o "${OS}" = "FreeBSD" ]; then NUM_JOBS="$(sysctl -n hw.ncpu)" fi +if [[ -n "${gcc_toolchain}" ]]; then + # Use the specified gcc installation for building. + export CC="$gcc_toolchain/bin/gcc" + export CXX="$gcc_toolchain/bin/g++" + # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, + # etc.) find the .so. + export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" +fi + +export CFLAGS="" +export CXXFLAGS="" +# LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is +# needed, on OS X it requires libc++. clang only automatically links to libc++ +# when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on +# OS X versions as old as 10.7. +# TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib. +# Remove this once all bots are on 10.7+, then use --enable-libcpp=yes and +# change all MACOSX_DEPLOYMENT_TARGET values to 10.7. +if [ "${OS}" = "Darwin" ]; then + # When building on 10.9, /usr/include usually doesn't exist, and while + # Xcode's clang automatically sets a sysroot, self-built clangs don't. + export CFLAGS="-isysroot $(xcrun --show-sdk-path)" + export CPPFLAGS="${CFLAGS}" + export CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}" +fi + # Build bootstrap clang if requested. if [[ -n "${bootstrap}" ]]; then + ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" echo "Building bootstrap compiler" mkdir -p "${LLVM_BOOTSTRAP_DIR}" - cd "${LLVM_BOOTSTRAP_DIR}" + pushd "${LLVM_BOOTSTRAP_DIR}" if [[ ! -f ./config.status ]]; then # The bootstrap compiler only needs to be able to build the real compiler, # so it needs no cross-compiler output support. In general, the host @@ -238,18 +318,38 @@ if [[ -n "${bootstrap}" ]]; then ../llvm/configure \ --enable-optimized \ --enable-targets=host-only \ + --enable-libedit=no \ --disable-threads \ --disable-pthreads \ --without-llvmgcc \ - --without-llvmgxx + --without-llvmgxx \ + --prefix="${ABS_INSTALL_DIR}" fi - MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}" + + ${MAKE} -j"${NUM_JOBS}" if [[ -n "${run_tests}" ]]; then - make check-all + ${MAKE} check-all + fi + + ${MAKE} install + if [[ -n "${gcc_toolchain}" ]]; then + # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap + # compiler can start. + cp -v "$(${CXX} -print-file-name=libstdc++.so.6)" \ + "${ABS_INSTALL_DIR}/lib/" fi - cd - - export CC="${PWD}/${LLVM_BOOTSTRAP_DIR}/Release+Asserts/bin/clang" - export CXX="${PWD}/${LLVM_BOOTSTRAP_DIR}/Release+Asserts/bin/clang++" + + popd + export CC="${ABS_INSTALL_DIR}/bin/clang" + export CXX="${ABS_INSTALL_DIR}/bin/clang++" + + if [[ -n "${gcc_toolchain}" ]]; then + # Tell the bootstrap compiler to use a specific gcc prefix to search + # for standard library headers and shared object file. + export CFLAGS="--gcc-toolchain=${gcc_toolchain}" + export CXXFLAGS="--gcc-toolchain=${gcc_toolchain}" + fi + echo "Building final compiler" fi @@ -257,24 +357,63 @@ fi # The clang bots have this path hardcoded in built/scripts/slave/compile.py, # so if you change it you also need to change these links. mkdir -p "${LLVM_BUILD_DIR}" -cd "${LLVM_BUILD_DIR}" +pushd "${LLVM_BUILD_DIR}" + +# Build libc++.dylib while some bots are still on OS X 10.6. +if [ "${OS}" = "Darwin" ]; then + rm -rf libcxxbuild + LIBCXXFLAGS="-O3 -std=c++11 -fstrict-aliasing" + + # libcxx and libcxxabi both have a file stdexcept.cpp, so put their .o files + # into different subdirectories. + mkdir -p libcxxbuild/libcxx + pushd libcxxbuild/libcxx + ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXX_DIR}"/src/*.cpp + popd + + mkdir -p libcxxbuild/libcxxabi + pushd libcxxbuild/libcxxabi + ${CXX:-c++} -c ${CXXFLAGS} ${LIBCXXFLAGS} "${ABS_LIBCXXABI_DIR}"/src/*.cpp -I"${ABS_LIBCXXABI_DIR}/include" + popd + + pushd libcxxbuild + ${CC:-cc} libcxx/*.o libcxxabi/*.o -o libc++.1.dylib -dynamiclib \ + -nodefaultlibs -current_version 1 -compatibility_version 1 \ + -lSystem -install_name @executable_path/libc++.dylib \ + -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ + -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ + -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp + ln -sf libc++.1.dylib libc++.dylib + popd + export LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" +fi + if [[ ! -f ./config.status ]]; then ../llvm/configure \ --enable-optimized \ + --enable-libedit=no \ --disable-threads \ --disable-pthreads \ --without-llvmgcc \ --without-llvmgxx fi -MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}" +if [[ -n "${gcc_toolchain}" ]]; then + # Copy in the right stdlibc++.so.6 so clang can start. + mkdir -p Release+Asserts/lib + cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" \ + Release+Asserts/lib/ +fi +MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}" STRIP_FLAGS= if [ "${OS}" = "Darwin" ]; then # See http://crbug.com/256342 STRIP_FLAGS=-x + + cp libcxxbuild/libc++.1.dylib Release+Asserts/bin fi strip ${STRIP_FLAGS} Release+Asserts/bin/clang -cd - +popd if [[ -n "${with_android}" ]]; then # Make a standalone Android toolchain. @@ -284,13 +423,17 @@ if [[ -n "${with_android}" ]]; then --system=linux-x86_64 \ --stl=stlport + # Android NDK r9d copies a broken unwind.h into the toolchain, see + # http://crbug.com/357890 + rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h + # Build ASan runtime for Android. # Note: LLVM_ANDROID_TOOLCHAIN_DIR is not relative to PWD, but to where we # build the runtime, i.e. third_party/llvm/projects/compiler-rt. - cd "${LLVM_BUILD_DIR}" - make -C tools/clang/runtime/ \ + pushd "${LLVM_BUILD_DIR}" + ${MAKE} -C tools/clang/runtime/ \ LLVM_ANDROID_TOOLCHAIN_DIR="../../../llvm-build/android-toolchain" - cd - + popd fi # Build Chrome-specific clang tools. Paths in this list should be relative to @@ -306,17 +449,21 @@ for CHROME_TOOL_DIR in ${chrome_tools}; do rm -rf "${TOOL_BUILD_DIR}" mkdir -p "${TOOL_BUILD_DIR}" cp "${TOOL_SRC_DIR}/Makefile" "${TOOL_BUILD_DIR}" - MACOSX_DEPLOYMENT_TARGET=10.5 make -j"${NUM_JOBS}" -C "${TOOL_BUILD_DIR}" + MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}" -C "${TOOL_BUILD_DIR}" done if [[ -n "$run_tests" ]]; then # Run a few tests. - PLUGIN_SRC_DIR="${THIS_DIR}/../plugins" - "${PLUGIN_SRC_DIR}/tests/test.sh" "${LLVM_BUILD_DIR}/Release+Asserts" - cd "${LLVM_BUILD_DIR}" - make check-all - cd - + for CHROME_TOOL_DIR in ${chrome_tools}; do + TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}" + if [[ -f "${TOOL_SRC_DIR}/tests/test.sh" ]]; then + "${TOOL_SRC_DIR}/tests/test.sh" "${LLVM_BUILD_DIR}/Release+Asserts" + fi + done + pushd "${LLVM_BUILD_DIR}" + ${MAKE} check-all + popd fi # After everything is done, log success for this revision. -echo "${CLANG_REVISION}" > "${STAMP_FILE}" +echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" diff --git a/chromium/tools/code_coverage/croc.css b/chromium/tools/code_coverage/croc.css deleted file mode 100644 index 071822dafad..00000000000 --- a/chromium/tools/code_coverage/croc.css +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2012 The Chromium Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* - * croc.css - styles for croc HTML output - */ - -body { - font-family:arial; -} - -table { - border-collapse:collapse; - border-width:0px; - border-style:solid; -} - -thead { - background-color:#C0C0E0; - text-align:center; -} - -td { - padding-right:10px; - padding-left:10px; - font-size:small; - border-width:1px; - border-style:solid; - border-color:black; -} - -td.secdesc { - text-align:center; - font-size:medium; - font-weight:bold; - border-width:0px; - border-style:none; - padding-top:10px; - padding-bottom:5px; -} - -td.section { - background-color:#D0D0F0; - text-align:center; -} - -td.stat { - text-align:center; -} - -td.number { - text-align:right; -} - -td.graph { - /* Hide the dummy character */ - color:#FFFFFF; - padding-left:6px; -} - -td.high_pct { - text-align:right; - background-color:#B0FFB0; -} -td.mid_pct { - text-align:right; - background-color:#FFFF90; -} -td.low_pct { - text-align:right; - background-color:#FFB0B0; -} - - -span.missing { - background-color:#FFB0B0; -} -span.instr { - background-color:#FFFF90; -} -span.covered { - background-color:#B0FFB0; -} - -span.g_missing { - background-color:#FF4040; -} -span.g_instr { - background-color:#FFFF00; -} -span.g_covered { - background-color:#40FF40; -} - -p.time { - padding-top:10px; - font-size:small; - font-style:italic; -} diff --git a/chromium/tools/code_coverage/croc.py b/chromium/tools/code_coverage/croc.py deleted file mode 100755 index 1b9908a5f89..00000000000 --- a/chromium/tools/code_coverage/croc.py +++ /dev/null @@ -1,722 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Crocodile - compute coverage numbers for Chrome coverage dashboard.""" - -import optparse -import os -import platform -import re -import sys -import croc_html -import croc_scan - - -class CrocError(Exception): - """Coverage error.""" - - -class CrocStatError(CrocError): - """Error evaluating coverage stat.""" - -#------------------------------------------------------------------------------ - - -class CoverageStats(dict): - """Coverage statistics.""" - - # Default dictionary values for this stat. - DEFAULTS = { 'files_covered': 0, - 'files_instrumented': 0, - 'files_executable': 0, - 'lines_covered': 0, - 'lines_instrumented': 0, - 'lines_executable': 0 } - - def Add(self, coverage_stats): - """Adds a contribution from another coverage stats dict. - - Args: - coverage_stats: Statistics to add to this one. - """ - for k, v in coverage_stats.iteritems(): - if k in self: - self[k] += v - else: - self[k] = v - - def AddDefaults(self): - """Add some default stats which might be assumed present. - - Do not clobber if already present. Adds resilience when evaling a - croc file which expects certain stats to exist.""" - for k, v in self.DEFAULTS.iteritems(): - if not k in self: - self[k] = v - -#------------------------------------------------------------------------------ - - -class CoveredFile(object): - """Information about a single covered file.""" - - def __init__(self, filename, **kwargs): - """Constructor. - - Args: - filename: Full path to file, '/'-delimited. - kwargs: Keyword args are attributes for file. - """ - self.filename = filename - self.attrs = dict(kwargs) - - # Move these to attrs? - self.local_path = None # Local path to file - self.in_lcov = False # Is file instrumented? - - # No coverage data for file yet - self.lines = {} # line_no -> None=executable, 0=instrumented, 1=covered - self.stats = CoverageStats() - - def UpdateCoverage(self): - """Updates the coverage summary based on covered lines.""" - exe = instr = cov = 0 - for l in self.lines.itervalues(): - exe += 1 - if l is not None: - instr += 1 - if l == 1: - cov += 1 - - # Add stats that always exist - self.stats = CoverageStats(lines_executable=exe, - lines_instrumented=instr, - lines_covered=cov, - files_executable=1) - - # Add conditional stats - if cov: - self.stats['files_covered'] = 1 - if instr or self.in_lcov: - self.stats['files_instrumented'] = 1 - -#------------------------------------------------------------------------------ - - -class CoveredDir(object): - """Information about a directory containing covered files.""" - - def __init__(self, dirpath): - """Constructor. - - Args: - dirpath: Full path of directory, '/'-delimited. - """ - self.dirpath = dirpath - - # List of covered files directly in this dir, indexed by filename (not - # full path) - self.files = {} - - # List of subdirs, indexed by filename (not full path) - self.subdirs = {} - - # Dict of CoverageStats objects summarizing all children, indexed by group - self.stats_by_group = {'all': CoverageStats()} - # TODO: by language - - def GetTree(self, indent=''): - """Recursively gets stats for the directory and its children. - - Args: - indent: indent prefix string. - - Returns: - The tree as a string. - """ - dest = [] - - # Compile all groupstats - groupstats = [] - for group in sorted(self.stats_by_group): - s = self.stats_by_group[group] - if not s.get('lines_executable'): - continue # Skip groups with no executable lines - groupstats.append('%s:%d/%d/%d' % ( - group, s.get('lines_covered', 0), - s.get('lines_instrumented', 0), - s.get('lines_executable', 0))) - - outline = '%s%-30s %s' % (indent, - os.path.split(self.dirpath)[1] + '/', - ' '.join(groupstats)) - dest.append(outline.rstrip()) - - for d in sorted(self.subdirs): - dest.append(self.subdirs[d].GetTree(indent=indent + ' ')) - - return '\n'.join(dest) - -#------------------------------------------------------------------------------ - - -class Coverage(object): - """Code coverage for a group of files.""" - - def __init__(self): - """Constructor.""" - self.files = {} # Map filename --> CoverageFile - self.root_dirs = [] # (root, altname) - self.rules = [] # (regexp, dict of RHS attrs) - self.tree = CoveredDir('') - self.print_stats = [] # Dicts of args to PrintStat() - - # Functions which need to be replaced for unit testing - self.add_files_walk = os.walk # Walk function for AddFiles() - self.scan_file = croc_scan.ScanFile # Source scanner for AddFiles() - - def CleanupFilename(self, filename): - """Cleans up a filename. - - Args: - filename: Input filename. - - Returns: - The cleaned up filename. - - Changes all path separators to '/'. - Makes relative paths (those starting with '../' or './' absolute. - Replaces all instances of root dirs with alternate names. - """ - # Change path separators - filename = filename.replace('\\', '/') - - # Windows doesn't care about case sensitivity. - if platform.system() in ['Windows', 'Microsoft']: - filename = filename.lower() - - # If path is relative, make it absolute - # TODO: Perhaps we should default to relative instead, and only understand - # absolute to be files starting with '\', '/', or '[A-Za-z]:'? - if filename.split('/')[0] in ('.', '..'): - filename = os.path.abspath(filename).replace('\\', '/') - - # Replace alternate roots - for root, alt_name in self.root_dirs: - # Windows doesn't care about case sensitivity. - if platform.system() in ['Windows', 'Microsoft']: - root = root.lower() - filename = re.sub('^' + re.escape(root) + '(?=(/|$))', - alt_name, filename) - return filename - - def ClassifyFile(self, filename): - """Applies rules to a filename, to see if we care about it. - - Args: - filename: Input filename. - - Returns: - A dict of attributes for the file, accumulated from the right hand sides - of rules which fired. - """ - attrs = {} - - # Process all rules - for regexp, rhs_dict in self.rules: - if regexp.match(filename): - attrs.update(rhs_dict) - - return attrs - # TODO: Files can belong to multiple groups? - # (test/source) - # (mac/pc/win) - # (media_test/all_tests) - # (small/med/large) - # How to handle that? - - def AddRoot(self, root_path, alt_name='_'): - """Adds a root directory. - - Args: - root_path: Root directory to add. - alt_name: If specified, name of root dir. Otherwise, defaults to '_'. - - Raises: - ValueError: alt_name was blank. - """ - # Alt name must not be blank. If it were, there wouldn't be a way to - # reverse-resolve from a root-replaced path back to the local path, since - # '' would always match the beginning of the candidate filename, resulting - # in an infinite loop. - if not alt_name: - raise ValueError('AddRoot alt_name must not be blank.') - - # Clean up root path based on existing rules - self.root_dirs.append([self.CleanupFilename(root_path), alt_name]) - - def AddRule(self, path_regexp, **kwargs): - """Adds a rule. - - Args: - path_regexp: Regular expression to match for filenames. These are - matched after root directory replacement. - kwargs: Keyword arguments are attributes to set if the rule applies. - - Keyword arguments currently supported: - include: If True, includes matches; if False, excludes matches. Ignored - if None. - group: If not None, sets group to apply to matches. - language: If not None, sets file language to apply to matches. - """ - - # Compile regexp ahead of time - self.rules.append([re.compile(path_regexp), dict(kwargs)]) - - def GetCoveredFile(self, filename, add=False): - """Gets the CoveredFile object for the filename. - - Args: - filename: Name of file to find. - add: If True, will add the file if it's not present. This applies the - transformations from AddRoot() and AddRule(), and only adds the file - if a rule includes it, and it has a group and language. - - Returns: - The matching CoveredFile object, or None if not present. - """ - # Clean filename - filename = self.CleanupFilename(filename) - - # Check for existing match - if filename in self.files: - return self.files[filename] - - # File isn't one we know about. If we can't add it, give up. - if not add: - return None - - # Check rules to see if file can be added. Files must be included and - # have a group and language. - attrs = self.ClassifyFile(filename) - if not (attrs.get('include') - and attrs.get('group') - and attrs.get('language')): - return None - - # Add the file - f = CoveredFile(filename, **attrs) - self.files[filename] = f - - # Return the newly covered file - return f - - def RemoveCoveredFile(self, cov_file): - """Removes the file from the covered file list. - - Args: - cov_file: A file object returned by GetCoveredFile(). - """ - self.files.pop(cov_file.filename) - - def ParseLcovData(self, lcov_data): - """Adds coverage from LCOV-formatted data. - - Args: - lcov_data: An iterable returning lines of data in LCOV format. For - example, a file or list of strings. - """ - cov_file = None - cov_lines = None - for line in lcov_data: - line = line.strip() - if line.startswith('SF:'): - # Start of data for a new file; payload is filename - cov_file = self.GetCoveredFile(line[3:], add=True) - if cov_file: - cov_lines = cov_file.lines - cov_file.in_lcov = True # File was instrumented - elif not cov_file: - # Inside data for a file we don't care about - so skip it - pass - elif line.startswith('DA:'): - # Data point - that is, an executable line in current file - line_no, is_covered = map(int, line[3:].split(',')) - if is_covered: - # Line is covered - cov_lines[line_no] = 1 - elif cov_lines.get(line_no) != 1: - # Line is not covered, so track it as uncovered - cov_lines[line_no] = 0 - elif line == 'end_of_record': - cov_file.UpdateCoverage() - cov_file = None - # (else ignore other line types) - - def ParseLcovFile(self, input_filename): - """Adds coverage data from a .lcov file. - - Args: - input_filename: Input filename. - """ - # TODO: All manner of error checking - lcov_file = None - try: - lcov_file = open(input_filename, 'rt') - self.ParseLcovData(lcov_file) - finally: - if lcov_file: - lcov_file.close() - - def GetStat(self, stat, group='all', default=None): - """Gets a statistic from the coverage object. - - Args: - stat: Statistic to get. May also be an evaluatable python expression, - using the stats. For example, 'stat1 - stat2'. - group: File group to match; if 'all', matches all groups. - default: Value to return if there was an error evaluating the stat. For - example, if the stat does not exist. If None, raises - CrocStatError. - - Returns: - The evaluated stat, or None if error. - - Raises: - CrocStatError: Error evaluating stat. - """ - # TODO: specify a subdir to get the stat from, then walk the tree to - # print the stats from just that subdir - - # Make sure the group exists - if group not in self.tree.stats_by_group: - if default is None: - raise CrocStatError('Group %r not found.' % group) - else: - return default - - stats = self.tree.stats_by_group[group] - # Unit tests use real dicts, not CoverageStats objects, - # so we can't AddDefaults() on them. - if group == 'all' and hasattr(stats, 'AddDefaults'): - stats.AddDefaults() - try: - return eval(stat, {'__builtins__': {'S': self.GetStat}}, stats) - except Exception, e: - if default is None: - raise CrocStatError('Error evaluating stat %r: %s' % (stat, e)) - else: - return default - - def PrintStat(self, stat, format=None, outfile=sys.stdout, **kwargs): - """Prints a statistic from the coverage object. - - Args: - stat: Statistic to get. May also be an evaluatable python expression, - using the stats. For example, 'stat1 - stat2'. - format: Format string to use when printing stat. If None, prints the - stat and its evaluation. - outfile: File stream to output stat to; defaults to stdout. - kwargs: Additional args to pass to GetStat(). - """ - s = self.GetStat(stat, **kwargs) - if format is None: - outfile.write('GetStat(%r) = %s\n' % (stat, s)) - else: - outfile.write(format % s + '\n') - - def AddFiles(self, src_dir): - """Adds files to coverage information. - - LCOV files only contains files which are compiled and instrumented as part - of running coverage. This function finds missing files and adds them. - - Args: - src_dir: Directory on disk at which to start search. May be a relative - path on disk starting with '.' or '..', or an absolute path, or a - path relative to an alt_name for one of the roots - (for example, '_/src'). If the alt_name matches more than one root, - all matches will be attempted. - - Note that dirs not underneath one of the root dirs and covered by an - inclusion rule will be ignored. - """ - # Check for root dir alt_names in the path and replace with the actual - # root dirs, then recurse. - found_root = False - for root, alt_name in self.root_dirs: - replaced_root = re.sub('^' + re.escape(alt_name) + '(?=(/|$))', root, - src_dir) - if replaced_root != src_dir: - found_root = True - self.AddFiles(replaced_root) - if found_root: - return # Replaced an alt_name with a root_dir, so already recursed. - - for (dirpath, dirnames, filenames) in self.add_files_walk(src_dir): - # Make a copy of the dirnames list so we can modify the original to - # prune subdirs we don't need to walk. - for d in list(dirnames): - # Add trailing '/' to directory names so dir-based regexps can match - # '/' instead of needing to specify '(/|$)'. - dpath = self.CleanupFilename(dirpath + '/' + d) + '/' - attrs = self.ClassifyFile(dpath) - if not attrs.get('include'): - # Directory has been excluded, so don't traverse it - # TODO: Document the slight weirdness caused by this: If you - # AddFiles('./A'), and the rules include 'A/B/C/D' but not 'A/B', - # then it won't recurse into './A/B' so won't find './A/B/C/D'. - # Workarounds are to AddFiles('./A/B/C/D') or AddFiles('./A/B/C'). - # The latter works because it explicitly walks the contents of the - # path passed to AddFiles(), so it finds './A/B/C/D'. - dirnames.remove(d) - - for f in filenames: - local_path = dirpath + '/' + f - - covf = self.GetCoveredFile(local_path, add=True) - if not covf: - continue - - # Save where we found the file, for generating line-by-line HTML output - covf.local_path = local_path - - if covf.in_lcov: - # File already instrumented and doesn't need to be scanned - continue - - if not covf.attrs.get('add_if_missing', 1): - # Not allowed to add the file - self.RemoveCoveredFile(covf) - continue - - # Scan file to find potentially-executable lines - lines = self.scan_file(covf.local_path, covf.attrs.get('language')) - if lines: - for l in lines: - covf.lines[l] = None - covf.UpdateCoverage() - else: - # File has no executable lines, so don't count it - self.RemoveCoveredFile(covf) - - def AddConfig(self, config_data, lcov_queue=None, addfiles_queue=None): - """Adds JSON-ish config data. - - Args: - config_data: Config data string. - lcov_queue: If not None, object to append lcov_files to instead of - parsing them immediately. - addfiles_queue: If not None, object to append add_files to instead of - processing them immediately. - """ - # TODO: All manner of error checking - cfg = eval(config_data, {'__builtins__': {}}, {}) - - for rootdict in cfg.get('roots', []): - self.AddRoot(rootdict['root'], alt_name=rootdict.get('altname', '_')) - - for ruledict in cfg.get('rules', []): - regexp = ruledict.pop('regexp') - self.AddRule(regexp, **ruledict) - - for add_lcov in cfg.get('lcov_files', []): - if lcov_queue is not None: - lcov_queue.append(add_lcov) - else: - self.ParseLcovFile(add_lcov) - - for add_path in cfg.get('add_files', []): - if addfiles_queue is not None: - addfiles_queue.append(add_path) - else: - self.AddFiles(add_path) - - self.print_stats += cfg.get('print_stats', []) - - def ParseConfig(self, filename, **kwargs): - """Parses a configuration file. - - Args: - filename: Config filename. - kwargs: Additional parameters to pass to AddConfig(). - """ - # TODO: All manner of error checking - f = None - try: - f = open(filename, 'rt') - # Need to strip CR's from CRLF-terminated lines or posix systems can't - # eval the data. - config_data = f.read().replace('\r\n', '\n') - # TODO: some sort of include syntax. - # - # Needs to be done at string-time rather than at eval()-time, so that - # it's possible to include parts of dicts. Path from a file to its - # include should be relative to the dir containing the file. - # - # Or perhaps it could be done after eval. In that case, there'd be an - # 'include' section with a list of files to include. Those would be - # eval()'d and recursively pre- or post-merged with the including file. - # - # Or maybe just don't worry about it, since multiple configs can be - # specified on the command line. - self.AddConfig(config_data, **kwargs) - finally: - if f: - f.close() - - def UpdateTreeStats(self): - """Recalculates the tree stats from the currently covered files. - - Also calculates coverage summary for files. - """ - self.tree = CoveredDir('') - for cov_file in self.files.itervalues(): - # Add the file to the tree - fdirs = cov_file.filename.split('/') - parent = self.tree - ancestors = [parent] - for d in fdirs[:-1]: - if d not in parent.subdirs: - if parent.dirpath: - parent.subdirs[d] = CoveredDir(parent.dirpath + '/' + d) - else: - parent.subdirs[d] = CoveredDir(d) - parent = parent.subdirs[d] - ancestors.append(parent) - # Final subdir actually contains the file - parent.files[fdirs[-1]] = cov_file - - # Now add file's contribution to coverage by dir - for a in ancestors: - # Add to 'all' group - a.stats_by_group['all'].Add(cov_file.stats) - - # Add to group file belongs to - group = cov_file.attrs.get('group') - if group not in a.stats_by_group: - a.stats_by_group[group] = CoverageStats() - cbyg = a.stats_by_group[group] - cbyg.Add(cov_file.stats) - - def PrintTree(self): - """Prints the tree stats.""" - # Print the tree - print 'Lines of code coverage by directory:' - print self.tree.GetTree() - -#------------------------------------------------------------------------------ - - -def Main(argv): - """Main routine. - - Args: - argv: list of arguments - - Returns: - exit code, 0 for normal exit. - """ - # Parse args - parser = optparse.OptionParser() - parser.add_option( - '-i', '--input', dest='inputs', type='string', action='append', - metavar='FILE', - help='read LCOV input from FILE') - parser.add_option( - '-r', '--root', dest='roots', type='string', action='append', - metavar='ROOT[=ALTNAME]', - help='add ROOT directory, optionally map in coverage results as ALTNAME') - parser.add_option( - '-c', '--config', dest='configs', type='string', action='append', - metavar='FILE', - help='read settings from configuration FILE') - parser.add_option( - '-a', '--addfiles', dest='addfiles', type='string', action='append', - metavar='PATH', - help='add files from PATH to coverage data') - parser.add_option( - '-t', '--tree', dest='tree', action='store_true', - help='print tree of code coverage by group') - parser.add_option( - '-u', '--uninstrumented', dest='uninstrumented', action='store_true', - help='list uninstrumented files') - parser.add_option( - '-m', '--html', dest='html_out', type='string', metavar='PATH', - help='write HTML output to PATH') - parser.add_option( - '-b', '--base_url', dest='base_url', type='string', metavar='URL', - help='include URL in base tag of HTML output') - - parser.set_defaults( - inputs=[], - roots=[], - configs=[], - addfiles=[], - tree=False, - html_out=None, - ) - - options = parser.parse_args(args=argv)[0] - - cov = Coverage() - - # Set root directories for coverage - for root_opt in options.roots: - if '=' in root_opt: - cov.AddRoot(*root_opt.split('=')) - else: - cov.AddRoot(root_opt) - - # Read config files - for config_file in options.configs: - cov.ParseConfig(config_file, lcov_queue=options.inputs, - addfiles_queue=options.addfiles) - - # Parse lcov files - for input_filename in options.inputs: - cov.ParseLcovFile(input_filename) - - # Add missing files - for add_path in options.addfiles: - cov.AddFiles(add_path) - - # Print help if no files specified - if not cov.files: - print 'No covered files found.' - parser.print_help() - return 1 - - # Update tree stats - cov.UpdateTreeStats() - - # Print uninstrumented filenames - if options.uninstrumented: - print 'Uninstrumented files:' - for f in sorted(cov.files): - covf = cov.files[f] - if not covf.in_lcov: - print ' %-6s %-6s %s' % (covf.attrs.get('group'), - covf.attrs.get('language'), f) - - # Print tree stats - if options.tree: - cov.PrintTree() - - # Print stats - for ps_args in cov.print_stats: - cov.PrintStat(**ps_args) - - # Generate HTML - if options.html_out: - html = croc_html.CrocHtml(cov, options.html_out, options.base_url) - html.Write() - - # Normal exit - return 0 - - -if __name__ == '__main__': - sys.exit(Main(sys.argv)) diff --git a/chromium/tools/code_coverage/croc_html.py b/chromium/tools/code_coverage/croc_html.py deleted file mode 100644 index 7866f472f7b..00000000000 --- a/chromium/tools/code_coverage/croc_html.py +++ /dev/null @@ -1,451 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Crocodile HTML output.""" - -import os -import shutil -import time -import xml.dom - - -class CrocHtmlError(Exception): - """Coverage HTML error.""" - - -class HtmlElement(object): - """Node in a HTML file.""" - - def __init__(self, doc, element): - """Constructor. - - Args: - doc: XML document object. - element: XML element. - """ - self.doc = doc - self.element = element - - def E(self, name, **kwargs): - """Adds a child element. - - Args: - name: Name of element. - kwargs: Attributes for element. To use an attribute which is a python - reserved word (i.e. 'class'), prefix the attribute name with 'e_'. - - Returns: - The child element. - """ - he = HtmlElement(self.doc, self.doc.createElement(name)) - element = he.element - self.element.appendChild(element) - - for k, v in kwargs.iteritems(): - if k.startswith('e_'): - # Remove prefix - element.setAttribute(k[2:], str(v)) - else: - element.setAttribute(k, str(v)) - - return he - - def Text(self, text): - """Adds a text node. - - Args: - text: Text to add. - - Returns: - self. - """ - t = self.doc.createTextNode(str(text)) - self.element.appendChild(t) - return self - - -class HtmlFile(object): - """HTML file.""" - - def __init__(self, xml_impl, filename): - """Constructor. - - Args: - xml_impl: DOMImplementation to use to create document. - filename: Path to file. - """ - self.xml_impl = xml_impl - doctype = xml_impl.createDocumentType( - 'HTML', '-//W3C//DTD HTML 4.01//EN', - 'http://www.w3.org/TR/html4/strict.dtd') - self.doc = xml_impl.createDocument(None, 'html', doctype) - self.filename = filename - - # Create head and body elements - root = HtmlElement(self.doc, self.doc.documentElement) - self.head = root.E('head') - self.body = root.E('body') - - def Write(self, cleanup=True): - """Writes the file. - - Args: - cleanup: If True, calls unlink() on the internal xml document. This - frees up memory, but means that you can't use this file for anything - else. - """ - f = open(self.filename, 'wt') - self.doc.writexml(f, encoding='UTF-8') - f.close() - - if cleanup: - self.doc.unlink() - # Prevent future uses of the doc now that we've unlinked it - self.doc = None - -#------------------------------------------------------------------------------ - -COV_TYPE_STRING = {None: 'm', 0: 'i', 1: 'E', 2: ' '} -COV_TYPE_CLASS = {None: 'missing', 0: 'instr', 1: 'covered', 2: ''} - - -class CrocHtml(object): - """Crocodile HTML output class.""" - - def __init__(self, cov, output_root, base_url=None): - """Constructor.""" - self.cov = cov - self.output_root = output_root - self.base_url = base_url - self.xml_impl = xml.dom.getDOMImplementation() - self.time_string = 'Coverage information generated %s.' % time.asctime() - - def CreateHtmlDoc(self, filename, title): - """Creates a new HTML document. - - Args: - filename: Filename to write to, relative to self.output_root. - title: Title of page - - Returns: - The document. - """ - f = HtmlFile(self.xml_impl, self.output_root + '/' + filename) - - f.head.E('title').Text(title) - - if self.base_url: - css_href = self.base_url + 'croc.css' - base_href = self.base_url + os.path.dirname(filename) - if not base_href.endswith('/'): - base_href += '/' - f.head.E('base', href=base_href) - else: - css_href = '../' * (len(filename.split('/')) - 1) + 'croc.css' - - f.head.E('link', rel='stylesheet', type='text/css', href=css_href) - - return f - - def AddCaptionForFile(self, body, path): - """Adds a caption for the file, with links to each parent dir. - - Args: - body: Body elemement. - path: Path to file. - """ - # This is slightly different that for subdir, because it needs to have a - # link to the current directory's index.html. - hdr = body.E('h2') - hdr.Text('Coverage for ') - dirs = [''] + path.split('/') - num_dirs = len(dirs) - for i in range(num_dirs - 1): - hdr.E('a', href=( - '../' * (num_dirs - i - 2) + 'index.html')).Text(dirs[i] + '/') - hdr.Text(dirs[-1]) - - def AddCaptionForSubdir(self, body, path): - """Adds a caption for the subdir, with links to each parent dir. - - Args: - body: Body elemement. - path: Path to subdir. - """ - # Link to parent dirs - hdr = body.E('h2') - hdr.Text('Coverage for ') - dirs = [''] + path.split('/') - num_dirs = len(dirs) - for i in range(num_dirs - 1): - hdr.E('a', href=( - '../' * (num_dirs - i - 1) + 'index.html')).Text(dirs[i] + '/') - hdr.Text(dirs[-1] + '/') - - def AddSectionHeader(self, table, caption, itemtype, is_file=False): - """Adds a section header to the coverage table. - - Args: - table: Table to add rows to. - caption: Caption for section, if not None. - itemtype: Type of items in this section, if not None. - is_file: Are items in this section files? - """ - - if caption is not None: - table.E('tr').E('th', e_class='secdesc', colspan=8).Text(caption) - - sec_hdr = table.E('tr') - - if itemtype is not None: - sec_hdr.E('th', e_class='section').Text(itemtype) - - sec_hdr.E('th', e_class='section').Text('Coverage') - sec_hdr.E('th', e_class='section', colspan=3).Text( - 'Lines executed / instrumented / missing') - - graph = sec_hdr.E('th', e_class='section') - graph.E('span', style='color:#00FF00').Text('exe') - graph.Text(' / ') - graph.E('span', style='color:#FFFF00').Text('inst') - graph.Text(' / ') - graph.E('span', style='color:#FF0000').Text('miss') - - if is_file: - sec_hdr.E('th', e_class='section').Text('Language') - sec_hdr.E('th', e_class='section').Text('Group') - else: - sec_hdr.E('th', e_class='section', colspan=2) - - def AddItem(self, table, itemname, stats, attrs, link=None): - """Adds a bar graph to the element. This is a series of elements. - - Args: - table: Table to add item to. - itemname: Name of item. - stats: Stats object. - attrs: Attributes dictionary; if None, no attributes will be printed. - link: Destination for itemname hyperlink, if not None. - """ - row = table.E('tr') - - # Add item name - if itemname is not None: - item_elem = row.E('td') - if link is not None: - item_elem = item_elem.E('a', href=link) - item_elem.Text(itemname) - - # Get stats - stat_exe = stats.get('lines_executable', 0) - stat_ins = stats.get('lines_instrumented', 0) - stat_cov = stats.get('lines_covered', 0) - - percent = row.E('td') - - # Add text - row.E('td', e_class='number').Text(stat_cov) - row.E('td', e_class='number').Text(stat_ins) - row.E('td', e_class='number').Text(stat_exe - stat_ins) - - # Add percent and graph; only fill in if there's something in there - graph = row.E('td', e_class='graph', width=100) - if stat_exe: - percent_cov = 100.0 * stat_cov / stat_exe - percent_ins = 100.0 * stat_ins / stat_exe - - # Color percent based on thresholds - percent.Text('%.1f%%' % percent_cov) - if percent_cov >= 80: - percent.element.setAttribute('class', 'high_pct') - elif percent_cov >= 60: - percent.element.setAttribute('class', 'mid_pct') - else: - percent.element.setAttribute('class', 'low_pct') - - # Graphs use integer values - percent_cov = int(percent_cov) - percent_ins = int(percent_ins) - - graph.Text('.') - graph.E('span', style='padding-left:%dpx' % percent_cov, - e_class='g_covered') - graph.E('span', style='padding-left:%dpx' % (percent_ins - percent_cov), - e_class='g_instr') - graph.E('span', style='padding-left:%dpx' % (100 - percent_ins), - e_class='g_missing') - - if attrs: - row.E('td', e_class='stat').Text(attrs.get('language')) - row.E('td', e_class='stat').Text(attrs.get('group')) - else: - row.E('td', colspan=2) - - def WriteFile(self, cov_file): - """Writes the HTML for a file. - - Args: - cov_file: croc.CoveredFile to write. - """ - print ' ' + cov_file.filename - title = 'Coverage for ' + cov_file.filename - - f = self.CreateHtmlDoc(cov_file.filename + '.html', title) - body = f.body - - # Write header section - self.AddCaptionForFile(body, cov_file.filename) - - # Summary for this file - table = body.E('table') - self.AddSectionHeader(table, None, None, is_file=True) - self.AddItem(table, None, cov_file.stats, cov_file.attrs) - - body.E('h2').Text('Line-by-line coverage:') - - # Print line-by-line coverage - if cov_file.local_path: - code_table = body.E('table').E('tr').E('td').E('pre') - - flines = open(cov_file.local_path, 'rt') - lineno = 0 - - for line in flines: - lineno += 1 - line_cov = cov_file.lines.get(lineno, 2) - e_class = COV_TYPE_CLASS.get(line_cov) - - code_table.E('span', e_class=e_class).Text('%4d %s : %s\n' % ( - lineno, - COV_TYPE_STRING.get(line_cov), - line.rstrip() - )) - - else: - body.Text('Line-by-line coverage not available. Make sure the directory' - ' containing this file has been scanned via ') - body.E('B').Text('add_files') - body.Text(' in a configuration file, or the ') - body.E('B').Text('--addfiles') - body.Text(' command line option.') - - # TODO: if file doesn't have a local path, try to find it by - # reverse-mapping roots and searching for the file. - - body.E('p', e_class='time').Text(self.time_string) - f.Write() - - def WriteSubdir(self, cov_dir): - """Writes the index.html for a subdirectory. - - Args: - cov_dir: croc.CoveredDir to write. - """ - print ' ' + cov_dir.dirpath + '/' - - # Create the subdir if it doesn't already exist - subdir = self.output_root + '/' + cov_dir.dirpath - if not os.path.exists(subdir): - os.mkdir(subdir) - - if cov_dir.dirpath: - title = 'Coverage for ' + cov_dir.dirpath + '/' - f = self.CreateHtmlDoc(cov_dir.dirpath + '/index.html', title) - else: - title = 'Coverage summary' - f = self.CreateHtmlDoc('index.html', title) - - body = f.body - - dirs = [''] + cov_dir.dirpath.split('/') - num_dirs = len(dirs) - sort_jsfile = '../' * (num_dirs - 1) + 'sorttable.js' - script = body.E('script', src=sort_jsfile) - body.E('/script') - - # Write header section - if cov_dir.dirpath: - self.AddCaptionForSubdir(body, cov_dir.dirpath) - else: - body.E('h2').Text(title) - - table = body.E('table', e_class='sortable') - table.E('h3').Text('Coverage by Group') - # Coverage by group - self.AddSectionHeader(table, None, 'Group') - - for group in sorted(cov_dir.stats_by_group): - self.AddItem(table, group, cov_dir.stats_by_group[group], None) - - # List subdirs - if cov_dir.subdirs: - table = body.E('table', e_class='sortable') - table.E('h3').Text('Subdirectories') - self.AddSectionHeader(table, None, 'Subdirectory') - - for d in sorted(cov_dir.subdirs): - self.AddItem(table, d + '/', cov_dir.subdirs[d].stats_by_group['all'], - None, link=d + '/index.html') - - # List files - if cov_dir.files: - table = body.E('table', e_class='sortable') - table.E('h3').Text('Files in This Directory') - self.AddSectionHeader(table, None, 'Filename', - is_file=True) - - for filename in sorted(cov_dir.files): - cov_file = cov_dir.files[filename] - self.AddItem(table, filename, cov_file.stats, cov_file.attrs, - link=filename + '.html') - - body.E('p', e_class='time').Text(self.time_string) - f.Write() - - def WriteRoot(self): - """Writes the files in the output root.""" - # Find ourselves - src_dir = os.path.split(self.WriteRoot.func_code.co_filename)[0] - - # Files to copy into output root - copy_files = ['croc.css'] - # Third_party files to copy into output root - third_party_files = ['sorttable.js'] - - # Copy files from our directory into the output directory - for copy_file in copy_files: - print ' Copying %s' % copy_file - shutil.copyfile(os.path.join(src_dir, copy_file), - os.path.join(self.output_root, copy_file)) - # Copy third party files from third_party directory into - # the output directory - src_dir = os.path.join(src_dir, 'third_party') - for third_party_file in third_party_files: - print ' Copying %s' % third_party_file - shutil.copyfile(os.path.join(src_dir, third_party_file), - os.path.join(self.output_root, third_party_file)) - - def Write(self): - """Writes HTML output.""" - - print 'Writing HTML to %s...' % self.output_root - - # Loop through the tree and write subdirs, breadth-first - # TODO: switch to depth-first and sort values - makes nicer output? - todo = [self.cov.tree] - while todo: - cov_dir = todo.pop(0) - - # Append subdirs to todo list - todo += cov_dir.subdirs.values() - - # Write this subdir - self.WriteSubdir(cov_dir) - - # Write files in this subdir - for cov_file in cov_dir.files.itervalues(): - self.WriteFile(cov_file) - - # Write files in root directory - self.WriteRoot() diff --git a/chromium/tools/code_coverage/croc_scan.py b/chromium/tools/code_coverage/croc_scan.py deleted file mode 100644 index 8d0e2e8df2a..00000000000 --- a/chromium/tools/code_coverage/croc_scan.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Crocodile source scanners.""" - - -import re - - -class Scanner(object): - """Generic source scanner.""" - - def __init__(self): - """Constructor.""" - - self.re_token = re.compile('#') - self.comment_to_eol = ['#'] - self.comment_start = None - self.comment_end = None - - def ScanLines(self, lines): - """Scans the lines for executable statements. - - Args: - lines: Iterator returning source lines. - - Returns: - An array of line numbers which are executable. - """ - exe_lines = [] - lineno = 0 - - in_string = None - in_comment = None - comment_index = None - - for line in lines: - lineno += 1 - in_string_at_start = in_string - - for t in self.re_token.finditer(line): - tokenstr = t.groups()[0] - - if in_comment: - # Inside a multi-line comment, so look for end token - if tokenstr == in_comment: - in_comment = None - # Replace comment with spaces - line = (line[:comment_index] - + ' ' * (t.end(0) - comment_index) - + line[t.end(0):]) - - elif in_string: - # Inside a string, so look for end token - if tokenstr == in_string: - in_string = None - - elif tokenstr in self.comment_to_eol: - # Single-line comment, so truncate line at start of token - line = line[:t.start(0)] - break - - elif tokenstr == self.comment_start: - # Multi-line comment start - end token is comment_end - in_comment = self.comment_end - comment_index = t.start(0) - - else: - # Starting a string - end token is same as start - in_string = tokenstr - - # If still in comment at end of line, remove comment - if in_comment: - line = line[:comment_index] - # Next line, delete from the beginnine - comment_index = 0 - - # If line-sans-comments is not empty, claim it may be executable - if line.strip() or in_string_at_start: - exe_lines.append(lineno) - - # Return executable lines - return exe_lines - - def Scan(self, filename): - """Reads the file and scans its lines. - - Args: - filename: Path to file to scan. - - Returns: - An array of line numbers which are executable. - """ - - # TODO: All manner of error checking - f = None - try: - f = open(filename, 'rt') - return self.ScanLines(f) - finally: - if f: - f.close() - - -class PythonScanner(Scanner): - """Python source scanner.""" - - def __init__(self): - """Constructor.""" - Scanner.__init__(self) - - # TODO: This breaks for strings ending in more than 2 backslashes. Need - # a pattern which counts only an odd number of backslashes, so the last - # one thus escapes the quote. - self.re_token = re.compile(r'(#|\'\'\'|"""|(? to your HTML -Add class="sortable" to any table you'd like to make sortable -Click on the headers to sort diff --git a/chromium/tools/code_coverage/third_party/sorttable.js b/chromium/tools/code_coverage/third_party/sorttable.js deleted file mode 100644 index 16ef551497b..00000000000 --- a/chromium/tools/code_coverage/third_party/sorttable.js +++ /dev/null @@ -1,494 +0,0 @@ -/* - SortTable - version 2 - 7th April 2007 - Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ - - Instructions: - Download this file - Add to your HTML - Add class="sortable" to any table you'd like to make sortable - Click on the headers to sort - - Thanks to many, many people for contributions and suggestions. - Licenced as X11: http://www.kryogenix.org/code/browser/licence.html - This basically means: do what you want with it. -*/ - - -var stIsIE = /*@cc_on!@*/false; - -sorttable = { - init: function() { - // quit if this function has already been called - if (arguments.callee.done) return; - // flag this function so we don't do the same thing twice - arguments.callee.done = true; - // kill the timer - if (_timer) clearInterval(_timer); - - if (!document.createElement || !document.getElementsByTagName) return; - - sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; - - forEach(document.getElementsByTagName('table'), function(table) { - if (table.className.search(/\bsortable\b/) != -1) { - sorttable.makeSortable(table); - } - }); - - }, - - makeSortable: function(table) { - if (table.getElementsByTagName('thead').length == 0) { - // table doesn't have a tHead. Since it should have, create one and - // put the first table row in it. - the = document.createElement('thead'); - the.appendChild(table.rows[0]); - table.insertBefore(the,table.firstChild); - } - // Safari doesn't support table.tHead, sigh - if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; - - if (table.tHead.rows.length != 1) return; // can't cope with two header rows - - // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as - // "total" rows, for example). This is B&R, since what you're supposed - // to do is put them in a tfoot. So, if there are sortbottom rows, - // for backwards compatibility, move them to tfoot (creating it if needed). - sortbottomrows = []; - for (var i=0; i5' : ' ▴'; - this.appendChild(sortrevind); - return; - } - if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { - // if we're already sorted by this column in reverse, just - // re-reverse the table, which is quicker - sorttable.reverse(this.sorttable_tbody); - this.className = this.className.replace('sorttable_sorted_reverse', - 'sorttable_sorted'); - this.removeChild(document.getElementById('sorttable_sortrevind')); - sortfwdind = document.createElement('span'); - sortfwdind.id = "sorttable_sortfwdind"; - sortfwdind.innerHTML = stIsIE ? ' 6' : ' ▾'; - this.appendChild(sortfwdind); - return; - } - - // remove sorttable_sorted classes - theadrow = this.parentNode; - forEach(theadrow.childNodes, function(cell) { - if (cell.nodeType == 1) { // an element - cell.className = cell.className.replace('sorttable_sorted_reverse',''); - cell.className = cell.className.replace('sorttable_sorted',''); - } - }); - sortfwdind = document.getElementById('sorttable_sortfwdind'); - if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } - sortrevind = document.getElementById('sorttable_sortrevind'); - if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } - - this.className += ' sorttable_sorted'; - sortfwdind = document.createElement('span'); - sortfwdind.id = "sorttable_sortfwdind"; - sortfwdind.innerHTML = stIsIE ? ' 6' : ' ▾'; - this.appendChild(sortfwdind); - - // build an array to sort. This is a Schwartzian transform thing, - // i.e., we "decorate" each row with the actual sort key, - // sort based on the sort keys, and then put the rows back in order - // which is a lot faster because you only do getInnerText once per row - row_array = []; - col = this.sorttable_columnindex; - rows = this.sorttable_tbody.rows; - for (var j=0; j 12) { - // definitely dd/mm - return sorttable.sort_ddmm; - } else if (second > 12) { - return sorttable.sort_mmdd; - } else { - // looks like a date, but we can't tell which, so assume - // that it's dd/mm (English imperialism!) and keep looking - sortfn = sorttable.sort_ddmm; - } - } - } - } - return sortfn; - }, - - getInnerText: function(node) { - // gets the text we want to use for sorting for a cell. - // strips leading and trailing whitespace. - // this is *not* a generic getInnerText function; it's special to sorttable. - // for example, you can override the cell text with a customkey attribute. - // it also gets .value for fields. - - if (!node) return ""; - - hasInputs = (typeof node.getElementsByTagName == 'function') && - node.getElementsByTagName('input').length; - - if (node.getAttribute("sorttable_customkey") != null) { - return node.getAttribute("sorttable_customkey"); - } - else if (typeof node.textContent != 'undefined' && !hasInputs) { - return node.textContent.replace(/^\s+|\s+$/g, ''); - } - else if (typeof node.innerText != 'undefined' && !hasInputs) { - return node.innerText.replace(/^\s+|\s+$/g, ''); - } - else if (typeof node.text != 'undefined' && !hasInputs) { - return node.text.replace(/^\s+|\s+$/g, ''); - } - else { - switch (node.nodeType) { - case 3: - if (node.nodeName.toLowerCase() == 'input') { - return node.value.replace(/^\s+|\s+$/g, ''); - } - case 4: - return node.nodeValue.replace(/^\s+|\s+$/g, ''); - break; - case 1: - case 11: - var innerText = ''; - for (var i = 0; i < node.childNodes.length; i++) { - innerText += sorttable.getInnerText(node.childNodes[i]); - } - return innerText.replace(/^\s+|\s+$/g, ''); - break; - default: - return ''; - } - } - }, - - reverse: function(tbody) { - // reverse the rows in a tbody - newrows = []; - for (var i=0; i=0; i--) { - tbody.appendChild(newrows[i]); - } - delete newrows; - }, - - /* sort functions - each sort function takes two parameters, a and b - you are comparing a[0] and b[0] */ - sort_numeric: function(a,b) { - aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); - if (isNaN(aa)) aa = 0; - bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); - if (isNaN(bb)) bb = 0; - return aa-bb; - }, - sort_alpha: function(a,b) { - if (a[0]==b[0]) return 0; - if (a[0] 0 ) { - var q = list[i]; list[i] = list[i+1]; list[i+1] = q; - swap = true; - } - } // for - t--; - - if (!swap) break; - - for(var i = t; i > b; --i) { - if ( comp_func(list[i], list[i-1]) < 0 ) { - var q = list[i]; list[i] = list[i-1]; list[i-1] = q; - swap = true; - } - } // for - b++; - - } // while(swap) - } -} - -/* ****************************************************************** - Supporting functions: bundled here to avoid depending on a library - ****************************************************************** */ - -// Dean Edwards/Matthias Miller/John Resig - -/* for Mozilla/Opera9 */ -if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", sorttable.init, false); -} - -/* for Internet Explorer */ -/*@cc_on @*/ -/*@if (@_win32) - document.write(" - - - - -
-  URL
-  HTTP
-  Socket
-  V8
-
-
-
-
-
-
- - diff --git a/chromium/tools/trace/trace_data.js b/chromium/tools/trace/trace_data.js deleted file mode 100644 index 2531d3ce065..00000000000 --- a/chromium/tools/trace/trace_data.js +++ /dev/null @@ -1,1050 +0,0 @@ -var raw_trace_events = [ -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x16e8260', 'extra':'http://mail.google.com', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_shell.cc', 'line_number':'825', 'usec_begin': 246537}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1', 'extra':'http://mail.google.com/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 250373}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 300584}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 301820}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 301844}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 302652}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 302786}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 302866}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 303348}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 304497}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 304548}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 304569}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 304627}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 304640}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 306405}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 306425}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 306443}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 308431}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 308477}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 308560}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 308606}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'439 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 308637}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 308651}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 308663}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 308675}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1279 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 367678}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'http://mail.google.com/mail/', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 368149}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 368763}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 368799}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 368991}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 369014}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 369028}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 369063}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 369130}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 370934}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 370964}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 370996}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 372273}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 373127}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 373160}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 373185}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 379657}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 387342}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 387405}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 387424}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 391679}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 423698}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 433561}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 433582}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 433661}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'628 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 433705}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 433719}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 433732}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 433748}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 466568}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 467724}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 467913}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 467931}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 470106}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 470143}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'4233 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 470177}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 470231}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3', 'extra':'https://mail.google.com/mail?view=page&name=browser&ver=1k96igf4806cy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 473833}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 474818}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 474867}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 477174}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 477224}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 477615}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x1828c00', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 477662}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 480476}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 480728}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 480744}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 488153}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 488720}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489077}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489092}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 489249}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 489309}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489346}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489360}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 489384}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 489544}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 489664}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 489678}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x4', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 490180}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 490442}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 490470}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 490597}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 490622}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 490636}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 490674}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 490688}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 490772}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 492500}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 492527}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 492546}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 513216}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 513450}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 513480}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 513509}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 543672}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 545326}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 545366}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 545386}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 579036}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 579232}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 579251}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 579307}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'611 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 579341}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 579354}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 579367}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 579394}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 604199}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 604781}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 605139}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 605157}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 605470}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 605487}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'1234 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 605508}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x17b8e60', 'extra':'https://ssl.google-analytics.com/siteopt.js?v=1&utmxkey=1206330561&utmx=&utmxx=&utmxtime=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 605550}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 605881}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 606445}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 606461}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 608174}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 612014}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 612070}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 612084}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 612669}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x5', 'extra':'https://mail.google.com/mail/help/images/logo.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 613155}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x6', 'extra':'https://mail.google.com/mail/images/corner_tl.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 614484}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 614782}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 614828}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 614842}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 614872}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x7', 'extra':'https://mail.google.com/mail/images/corner_tr.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 615312}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x8', 'extra':'https://mail.google.com/mail/images/corner_bl.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 615792}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x9', 'extra':'https://mail.google.com/mail/images/corner_br.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 616264}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 616610}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 616653}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 616667}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 616688}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xa', 'extra':'https://mail.google.com/mail/help/images/icons/spam_new.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 617692}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xb', 'extra':'https://mail.google.com/mail/help/images/icons/cell.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 618471}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xc', 'extra':'https://mail.google.com/mail/help/images/icons/storage.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 619165}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 619695}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 619744}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 619758}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 619784}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 619894}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 619930}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 619944}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 619962}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 620183}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 620277}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 620292}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 620313}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xd', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 625447}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 626010}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 626071}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 626085}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 626104}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 626259}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 626283}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 626296}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 626420}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 626436}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 626507}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x1808ae8', 'extra':'668 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 626554}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 626569}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 626581}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 626604}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 631563}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 631620}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 631634}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xe', 'extra':'https://mail.google.com/mail/help/images/button_1_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 632318}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0xf', 'extra':'https://www.google.com/mail/help/images/clear.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 632749}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x10', 'extra':'https://mail.google.com/mail/help/images/button_1_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 633222}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x11', 'extra':'https://mail.google.com/mail/help/images/button_1_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 633704}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x12', 'extra':'https://mail.google.com/mail/help/images/button_2_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 634280}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x13', 'extra':'https://mail.google.com/mail/help/images/button_2_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 634918}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x14', 'extra':'https://mail.google.com/mail/help/images/button_2_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 635476}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x15', 'extra':'https://mail.google.com/mail/help/images/button_3_1.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 635969}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x16', 'extra':'https://mail.google.com/mail/help/images/button_3_2.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 636515}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x17', 'extra':'https://mail.google.com/mail/help/images/button_3_3.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 636987}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 637536}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 637742}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 637796}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 637812}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 637838}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 637905}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 637940}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 637954}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 640514}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x18', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 642073}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x4', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 642324}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 643004}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 643029}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 643042}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 643078}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 643092}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 643146}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x17c4d58', 'extra':'601 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 643196}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 643215}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 643228}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 643248}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x1808ae8', 'extra':'406 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 664360}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x1844b80', 'extra':'https://www.google.com/accounts/google_transparent.gif', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 664656}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x1808ae8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 665032}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x17c4d58', 'extra':'390 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 667425}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x17c35e8', 'extra':'https://ssl.google-analytics.com/urchin.js', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 667652}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x17c4d58', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 668023}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'25', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 674638}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x5', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 685812}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x6', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 692814}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x7', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 693201}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x8', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 698519}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x9', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 698776}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xa', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 703813}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xb', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704060}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xc', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704264}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xe', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704483}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xf', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 704744}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x10', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705404}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x11', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705684}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x12', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 705929}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x13', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706155}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x14', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706620}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x15', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 706805}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x16', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707344}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x17', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707631}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0xd', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 707885}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 708860}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 710721}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 710737}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 711495}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 711663}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 711730}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 711744}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 724816}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 724869}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 724883}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 724905}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x19', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 725598}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 726084}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 726112}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 726128}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 726168}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 726185}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 726504}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 726523}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 726544}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1a', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 728532}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 728968}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 728992}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 729008}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 729096}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 729113}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 729407}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 729426}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 729446}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 730189}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x18', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 730637}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 746070}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 746305}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 746339}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 746360}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 749792}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 750021}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 750051}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 750073}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 771135}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 772294}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 772351}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 772369}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'1171 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 775944}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 776955}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'314 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 776990}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 777007}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 804626}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 804813}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 804835}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 804905}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265a568', 'extra':'1003 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 804939}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 804952}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 804968}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 804989}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 823698}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 823868}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 823902}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 823964}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x265aeb0', 'extra':'993 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 823993}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 824006}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 824022}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 824039}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265a568', 'extra':'554 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 826462}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 827124}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 827368}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1300046089&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmcn=1&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/mail/gaia/homepage&utmac=UA-992684-1&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 827398}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x19', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 827721}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x265aeb0', 'extra':'551 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 847745}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 848279}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 848496}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://ssl.google-analytics.com/__utm.gif?utmwv=1.3&utmn=1449512545&utmcs=UTF-8&utmsr=1920x1200&utmsc=32-bit&utmul=en-us&utmje=1&utmfl=9.0%20%20r115&utmdt=%0A%20%20Gmail%3A%20Email%20from%20Google%0A&utmhn=www.google.com&utmhid=1875579123&utmr=-&utmp=/1206330561/test&utmac=UA-1923148-3&utmcc=__utma%3D173272373.1300046089.1221584154.1221584154.1221584154.1%3B%2B__utmx%3D173272373.%3B%2B__utmz%3D173272373.1221584154.1.1.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 848542}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1b', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 850184}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 850670}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 850693}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 850706}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 850740}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 850759}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 851028}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 851047}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 851062}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 851484}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 853022}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 853209}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 853244}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 853286}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1719 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 855598}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 856827}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 856864}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 856882}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 861150}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 861377}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 861394}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 861449}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'582 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 861482}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 861495}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 861515}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 861534}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'565 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 892717}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 893171}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 893394}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail/images/c.gif?t=1221584153332', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 893421}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=1k96igf4806cy<mpl=default<mplcache=2', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 893699}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 893847}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'12', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 923735}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1173749}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1423773}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1673792}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'3', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 1924790}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2174817}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2424843}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1c', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 2657744}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 2658189}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 2658239}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 2658254}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 2658292}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 2658306}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 2658367}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'597 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 2658414}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 2658428}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 2658440}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 2658455}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2674849}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'498 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 2712401}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 2712952}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'https://mail.google.com/mail?gxlu=erikkay&zx=1221584155500', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 2713157}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 2713174}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 2924878}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3175861}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3425898}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3675905}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 3925923}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4175951}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4425962}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4675987}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 4926016}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5034304}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1d', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5034619}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5035008}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5035035}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5035049}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5035082}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5035096}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5035375}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5035392}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5035409}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5036730}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5036969}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5037014}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5037064}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5039568}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5040730}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5040764}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5040782}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5044663}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5044830}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5044855}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5044964}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'1067 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5044992}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5045007}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_body', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'306', 'usec_begin': 5045020}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5045043}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26d7910', 'extra':'219 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5045061}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_body', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'311', 'usec_begin': 5045074}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5045087}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5045100}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5136971}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5137031}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5137045}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5137059}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26d7910', 'extra':'547 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5137078}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'https://www.google.com/accounts/ServiceLoginAuth?service=mail', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5137821}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26d7910', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5138262}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1d', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5138291}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5138722}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5138744}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5138757}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5138779}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5138793}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5139038}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5139055}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5139075}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5140266}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5140480}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'70 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5140522}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5140563}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'1718 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5142351}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5143531}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'186 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5143565}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5143582}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'47 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5147388}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5147552}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5147586}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5147647}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c29a8', 'extra':'1572 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5147681}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5147695}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5147709}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5147723}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5176025}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'1425 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5179942}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5180371}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5180747}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5180766}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5180999}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5181037}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c29a8', 'extra':'114 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5181057}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x184aed0', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5181094}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5184752}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5184865}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5184880}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5185121}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'https://www.google.com/accounts/CheckCookie?continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3F&service=mail<mpl=default&chtml=LoginDoneHtml', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5185249}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5185368}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1e', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5186094}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5186490}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5186836}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5186855}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5186955}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5186972}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5187271}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5187289}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5187304}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5188602}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5188632}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5188663}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5188736}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x26c1c50', 'extra':'935 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5188786}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5188799}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5188813}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5188831}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5426048}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x26c1c50', 'extra':'1403 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5448207}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x184aed0', 'extra':'http://mail.google.com/mail/?auth=DQAAAIcAAADbe-apndwa7Xx20a4Fl-4priInNZo_bihPly3fHKKz17I0Sgr02B1EXCHhvGL6Ifi3JHFN9Z08Jsq7_3ZNuqdau5F6rcqTxLAHgQuLykwgkwch36z_ge541j7ef1hfCkal7F4ThC42jFkBiXD5Ia9K09lkrSl7uQlDfcnH-Qzz18TuHBIlaTTo60x3wF13E4w&gausr=erikkay%40gmail.com', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5448754}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26c1c50', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 5449221}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1e', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5449247}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 5449521}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 5449543}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 5449565}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 5449588}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 5449601}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 5449875}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 5449891}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 5449919}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 5451177}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 5451207}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 5451226}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 5451267}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1076 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 5451306}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 5451326}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 5451344}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5451377}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'4096 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5659772}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 5660050}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5660264}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5660286}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5660572}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5660590}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'194 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5660609}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5660621}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5663002}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5663067}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5663082}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5663444}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x1f', 'extra':'http://mail.google.com/mail/?view=page&name=browser&ver=1k96igf4806cy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5663617}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5664187}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5664204}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'1243 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 5664228}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5664242}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 5664497}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 5664513}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5664666}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5664846}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5664861}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5666301}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5666531}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5666638}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5666653}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5669200}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5672512}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5673323}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5673340}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5673454}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x20', 'extra':'http://mail.google.com/mail/?ui=2&view=js&name=js&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5674043}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x21', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5674722}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x22', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5675392}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x23', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5676060}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1f', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5676230}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'3', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 5676274}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5678859}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5679537}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5679553}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5679962}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5681218}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5682436}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5682452}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5685626}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5686710}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5687420}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5687436}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5687815}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5690191}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5691313}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5691330}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5692120}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5693609}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5694734}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5694750}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5695974}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5697446}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5698579}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5698595}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5704025}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5704226}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x21', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5704446}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5707224}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5708662}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5708678}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5710175}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5711076}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5711922}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5711939}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5712496}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5713037}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x22', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5713115}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5714839}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5715817}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5715834}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5716464}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5717330}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5718018}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5718057}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5719545}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5720612}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5721545}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5721568}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x24', 'extra':'http://mail.google.com/mail/?ui=2&view=ss&ver=gh1z9bhrf433&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 5725484}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5725885}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'http://mail.google.com/mail/?ui=2&view=bsp&ver=1qygpcgurkovy', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 5726725}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x23', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5726810}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5728493}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5729806}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5729822}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5730693}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5731723}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5732590}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5732605}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5733440}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5734576}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5735554}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5735570}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5736975}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5739862}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5741391}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5741412}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5742147}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5744058}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5744928}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5744944}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5745594}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5746916}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5747953}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5747968}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5748623}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5749906}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5750861}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5750877}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5751605}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5753859}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5754954}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5754970}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5755731}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5760132}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5763002}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5763019}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5770324}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5771435}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5772394}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5772410}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5772744}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5774818}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5775747}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5775763}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5778463}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5780166}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5781529}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5781563}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5781924}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5782823}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5783630}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5783646}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5783866}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'12378 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 5784462}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x26b99b0', 'extra':'http://mail.google.com/mail/?shva=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 5784507}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5785901}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5786613}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5786637}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5786935}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5787995}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5788741}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5788757}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5788967}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5789815}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5790442}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5790458}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5790690}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5794789}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5796229}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5796246}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5797596}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x24', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5804084}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5807913}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5809711}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5809728}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5810930}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5812241}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5813376}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5813399}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5813829}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5814801}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5815619}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5815635}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5815922}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5820052}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5821491}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5821507}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5823413}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5824726}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5825918}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5825934}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5827542}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5833240}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5838020}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5838036}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5838178}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5839050}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5839934}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5839951}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5840288}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5841576}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5842569}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5842585}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5842837}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5843917}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5844784}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5844800}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5845056}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5845915}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5846647}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5846663}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5847032}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x1e', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 5847198}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5848983}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5849929}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5849944}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5850203}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5851279}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5852131}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5852147}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5852588}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5854731}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5856045}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5856061}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5856517}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5857483}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5858279}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5858295}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5858530}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5860092}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5861295}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5861312}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5862046}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5863334}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5864083}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5864099}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5865299}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5866376}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5867211}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5867227}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5867534}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5868822}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5869580}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5869595}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5869966}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5870945}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5871949}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5871965}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5872419}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5874482}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5875635}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5875652}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5875959}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5876958}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5877753}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5877771}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5878074}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5879102}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5880039}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5880056}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5880498}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5883196}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5884790}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5884807}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5886935}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5887846}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5888900}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5888916}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5889562}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5891077}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5892318}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5892334}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5893038}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5894495}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5895265}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5895281}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5895541}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5896804}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5897890}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5897906}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5898425}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5899375}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5900216}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5900232}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5900602}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5902004}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5902825}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5902840}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5903198}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5904155}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5904843}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5904859}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5905208}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5906386}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5907352}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5907368}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5908413}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5909685}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5910618}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5910634}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5911162}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5912612}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5913905}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5913926}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5914786}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5916583}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5917588}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5917603}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5923655}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5925193}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5926428}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5926444}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5927406}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5929316}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5930373}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5930390}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5930859}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5932088}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5933072}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5933087}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5933405}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5934363}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5935105}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5935121}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5937089}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5939306}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5940982}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5940999}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5941663}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5942543}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5943167}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5943183}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5943375}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5944287}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5945048}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5945064}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5945312}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5946902}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5947689}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5947704}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5947982}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5949161}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5950128}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5950144}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5950491}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5951885}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5952879}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5952895}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5954060}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5956682}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5958366}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5958382}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5958904}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5959774}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5960572}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5960589}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5960975}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5962060}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5963319}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5963336}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5963754}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5965412}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5966375}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5966391}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5966925}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5969748}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5971857}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5971880}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5972629}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5974254}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5974979}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5974996}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5975798}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5976827}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5977665}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5977681}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5977957}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5989725}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5991102}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5991119}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5991574}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5992621}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5993420}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5993436}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5993890}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5994770}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5995430}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5995454}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5995644}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 5997509}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 5998368}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 5998384}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 5998878}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6000447}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6004922}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6008518}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6008536}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6016226}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6017496}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6018313}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6018329}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6018656}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6018958}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6019128}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6019143}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6019395}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6019530}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6019634}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6019657}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6019730}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6020006}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6020069}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6020084}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x25', 'extra':'about:blank', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6154931}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'frame.load', 'id':'0x16e8488', 'extra':'about:blank', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'310', 'usec_begin': 6155294}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x25', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6155359}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x26', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6190721}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x27', 'extra':'http://mail.google.com/mail/rc?a=af&c=fff1a8&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6222057}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x28', 'extra':'http://mail.google.com/mail/rc?a=af&c=c3d9ff&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6223307}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x29', 'extra':'http://mail.google.com/mail/images/2/5/c/icons1c.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6227933}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2a', 'extra':'http://mail.google.com/mail/images/2/icons_ns2a.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6229889}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2b', 'extra':'http://mail.google.com/mail/rc?a=af&c=ccc&w=4&h=4', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6235619}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2c', 'extra':'http://mail.google.com/mail/rc?a=af&c=c3d9ff&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6240936}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2d', 'extra':'http://mail.google.com/mail/rc?a=af&c=b5edbc&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6241168}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2e', 'extra':'http://mail.google.com/mail/rc?a=af&c=e0ecff&w=3&h=3', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6256964}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x2f', 'extra':'http://mail.google.com/mail/images/2/5/logo.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6362778}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6474842}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6475026}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 6640799}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 6640862}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 6640876}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 6640892}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x30', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6641172}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 6641558}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 6641587}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 6641601}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 6641640}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 6641655}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 6642083}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 6642103}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 6642117}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 6643324}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 6643353}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 6643373}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 6643409}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x318d410', 'extra':'648 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 6643437}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 6643451}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 6643463}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6643484}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x318d410', 'extra':'530 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 6665182}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 6665381}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x3123180', 'extra':'http://www.google.com/setgmail?zx=li65sohl5bca', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6665704}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6665721}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x31', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6670763}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 6671109}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 6671134}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 6671147}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 6671181}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 6671195}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 6671242}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1237 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 6671295}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 6671309}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 6671322}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6671346}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'4096 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 6705526}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 6705775}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6705906}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 6705926}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x20', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6724041}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'52', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 6829332}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 6829507}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 6829528}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'145 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'169', 'usec_begin': 6829554}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/?ui=2&ik=2f47b34cd6&view=au&rt=j', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 6829578}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x32', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=ld%2Cml&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 6831901}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x26', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6836122}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x27', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6836346}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x28', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6862988}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x29', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6864446}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6892630}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6909888}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2c', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6910021}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6913268}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2e', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6916383}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x2f', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6916484}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x31', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 6926048}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x33', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=cv&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7006135}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x32', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7006601}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x34', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=mo%2Ccw%2Cch&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7069712}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x33', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7070044}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x35', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=cm&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7124934}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x34', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7125262}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'50', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7125318}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x36', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=pc&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7154226}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x35', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7154552}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x37', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=ca&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7161100}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x36', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7161380}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x38', 'extra':'http://mail.google.com/mail/?ui=2&view=jsm&name=e&ver=vuagRBgWwto&am=R_E4pcQ3aAGDQefb', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7167291}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x37', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7167559}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x38', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7217361}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x39', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7231075}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7232017}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7232053}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7232074}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7232126}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7232148}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7232197}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1217 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7232247}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7232261}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7232274}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7232301}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3a', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7236419}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3a', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7236457}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3b', 'extra':'http://mail.google.com/mail/images/cleardot.gif', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7245353}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3b', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7245394}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3c', 'extra':'http://mail.google.com/mail/images/2/icons_ns2a.png', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7247637}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3c', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7247672}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'597 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7268945}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7269174}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7269424}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x2f33910', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1086&MODE=init&zx=gsd2cum2kqx0&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7269459}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'47', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7375719}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3d', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7377167}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x39', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7377400}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7377570}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7377597}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7377618}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7377657}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_host', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'270', 'usec_begin': 7377672}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_host', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'275', 'usec_begin': 7378021}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.connect', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'279', 'usec_begin': 7378038}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.connect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'73', 'usec_begin': 7378053}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.connect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'238', 'usec_begin': 7401287}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.connect', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'284', 'usec_begin': 7401329}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7401345}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7401386}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x2e8fea0', 'extra':'803 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7401417}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7401430}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7401444}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7401462}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x2e8fea0', 'extra':'544 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7433482}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7433788}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7434023}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://chatenabled.mail.google.com/mail/images/cleardot.gif?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1234&zx=ycda9of1csnp', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7434055}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'url.load', 'id':'0x3d', 'extra':'', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'196', 'usec_begin': 7434302}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'url.load', 'id':'0x3e', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\webkit\tools\test_shell\test_webview_delegate.cc', 'line_number':'189', 'usec_begin': 7435539}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'252', 'usec_begin': 7436159}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.resolve_proxy', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'257', 'usec_begin': 7436193}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'261', 'usec_begin': 7436214}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.init_conn', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'266', 'usec_begin': 7436260}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'297', 'usec_begin': 7436282}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'192', 'usec_begin': 7436335}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.write', 'id':'0x183c9d0', 'extra':'1220 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'201', 'usec_begin': 7436389}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.write_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'302', 'usec_begin': 7436419}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'315', 'usec_begin': 7436437}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7436451}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'548 bytes', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'279', 'usec_begin': 7468253}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_headers', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'320', 'usec_begin': 7468524}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7468734}, -{'pid':'0x854', 'tid':'0xa20', 'type':'END', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'329', 'usec_begin': 7468755}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'http.read_body', 'id':'0x185c988', 'extra':'http://mail.google.com/mail/channel/test?at=xn3j339j0a8vwew777x485j2ygbokt&VER=6&it=1291&TYPE=xmlhttp&zx=ev050ueswmrg&t=1', 'file':'E:\src\cr\src\net\http\http_network_transaction.cc', 'line_number':'324', 'usec_begin': 7468881}, -{'pid':'0x854', 'tid':'0xa20', 'type':'BEGIN', 'name':'socket.read', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'160', 'usec_begin': 7468898}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'6', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7626418}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 7876733}, -{'pid':'0x854', 'tid':'0x208', 'type':'INSTANT', 'name':'heartbeat.cpu', 'id':'0x0', 'extra':'0', 'file':'E:\src\cr\src\base\trace_event.cc', 'line_number':'76', 'usec_begin': 8126490}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 8309792}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 8309858}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 8309873}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 8326339}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'965', 'usec_begin': 8326394}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.compile', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'967', 'usec_begin': 8326477}, -{'pid':'0x854', 'tid':'0x208', 'type':'BEGIN', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'972', 'usec_begin': 8326505}, -{'pid':'0x854', 'tid':'0x208', 'type':'END', 'name':'v8.run', 'id':'0x0', 'extra':'', 'file':'E:\src\cr\src\webkit\port\bindings\v8\v8_proxy.cpp', 'line_number':'974', 'usec_begin': 8341241}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x183c9d0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8341596}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x318d410', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8341826}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x2e8fea0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375190}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x265a568', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375275}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x265aeb0', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375394}, -{'pid':'0x854', 'tid':'0xa20', 'type':'INSTANT', 'name':'socket.disconnect', 'id':'0x26c29a8', 'extra':'', 'file':'E:\src\cr\src\net\base\tcp_client_socket.cc', 'line_number':'113', 'usec_begin': 8375490}, -]; diff --git a/chromium/tools/traceline/svgui/README b/chromium/tools/traceline/svgui/README deleted file mode 100644 index 1a113e281bc..00000000000 --- a/chromium/tools/traceline/svgui/README +++ /dev/null @@ -1,12 +0,0 @@ -This is a small "web application" to display traceline trace data. It uses -xhtml, SVG, and JavaScript to interpret the JSON data in a timeline format. -Events can be moused over to show details, stack traces, etc. - -The name of the JSON file should be supplied behind a # in the URL. Multiple -JSON files can be listed (comma separated), allowing you to compare multiple -sets of data. Examples: - -http://blah/traceline.xml#startup-release.json -http://blah/traceline.xml#mydata1.json,mydata2.json - -Dean McNamee diff --git a/chromium/tools/traceline/svgui/startup-release.json b/chromium/tools/traceline/svgui/startup-release.json deleted file mode 100644 index 37a36201da2..00000000000 --- a/chromium/tools/traceline/svgui/startup-release.json +++ /dev/null @@ -1,178 +0,0 @@ -parseEvents([ -{'stacktrace': [], 'thread': 3956, 'eventtype': 'EVENT_TYPE_APC', 'func_addr_name': 'ntdll.dll!LdrInitializeThunk+0x0', 'ret_addr': 2089872071, 'done': 23.106567999999999, 'func_addr': 2089816446, 'ms': 6.3611440000000004, 'cpu': 2147742720}, -{'stacktrace': [[2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089917304, 'ntdll.dll!LdrpGetProcedureAddress+0x1c3'], [2089917344, 'ntdll.dll!LdrGetProcedureAddress+0x18'], [2089952052, 'ntdll.dll!LdrpInitializeProcess+0x878'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 2147323904, 'startaddr': 2088763392, 'ms': 7.0830229999999998, 'cpu': 2147742720}, -{'stacktrace': [[2118314946, 'USER32.dll!_UserClientDllInitialize+0x246'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089948990, 'ntdll.dll!LdrpInitializeProcess+0xfffffc82'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'syscall': 4316, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiInit', 'done': 12.667252, 'ms': 11.086605, 'syscallargs': [1242536, 1243632, 2118314946], 'cpu': 2147742720}, -{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2091021301, 'SHELL32.dll!SHFusionInitializeIDCC+0x6d'], [2091021175, 'SHELL32.dll!SHFusionInitializeFromModuleID+0x3a'], [2091020981, 'SHELL32.dll!_ProcessAttach+0x2f'], [2091020914, 'SHELL32.dll!DllMain+0x3fe1a'], [2090759390, 'SHELL32.dll!_DllMainCRTStartup+0x48'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089948990, 'ntdll.dll!LdrpInitializeProcess+0xfffffc82'], [2089948729, 'ntdll.dll!_LdrpInitialize+0x88d3'], [1717963930, 'failed']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 16.840966999999999, 'ms': 13.546135, 'syscallargs': [32, 1240476, 1240476], 'cpu': 2147742720}, -{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2001057805, 'comctl32.dll!SHFusionInitializeIDCC+0x83'], [2001057855, 'comctl32.dll!SHFusionInitializeID+0x12'], [2001057879, 'comctl32.dll!SHFusionInitialize+0xf'], [2000503209, 'comctl32.dll!_ProcessAttach+0x32'], [2000503399, 'comctl32.dll!LibMain+0x21'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089902456, 'ntdll.dll!LdrpLoadDll+0xfffffe4f'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [2088808028, 'kernel32.dll!LoadLibraryW+0x11'], [2091021388, 'SHELL32.dll!SHFusionLoadLibrary+0x2a'], [2090759619, 'SHELL32.dll!DelayLoadCC+0x15']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 21.051558, 'ms': 17.985804999999999, 'syscallargs': [32, 1237992, 1237992], 'cpu': 2147742720}, -{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009076731, 'VERSION.dll!GetFileVersionInfoSizeW+0x6a'], [4315331, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x23 [ c:\\g\\trunk\\src\\base\\file_version_info.cc:46 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 24.995356000000001, 'ms': 24.501438, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720}, -{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009076752, 'VERSION.dll!GetFileVersionInfoSizeW+0x7f'], [4315331, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x23 [ c:\\g\\trunk\\src\\base\\file_version_info.cc:46 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 25.491229000000001, 'ms': 24.997869999999999, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720}, -{'stacktrace': [[2089888951, 'ntdll.dll!LdrAccessResource+0x15'], [2009077479, 'VERSION.dll!GetFileVersionInfoW+0x68'], [4315373, 'chrome.exe!FileVersionInfo::CreateFileVersionInfo+0x4d [ c:\\g\\trunk\\src\\base\\file_version_info.cc:54 ]'], [4202450, "chrome.exe!`anonymous namespace'::GetCustomInfo+0x22 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:63 ]"], [4204639, 'chrome.exe!InitCrashReporter+0x13f [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:238 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 178, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQueryVirtualMemory', 'done': 26.258085999999999, 'ms': 25.763888999999999, 'syscallargs': [4294967295, 19333120, 0], 'cpu': 2147742720}, -{'eventid': 1718060360, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2089993072, 'ntdll.dll!RtlpInitializeTimerThreadPool+0xb7'], [2089992706, 'ntdll.dll!RtlpInitializeWorkerThreadPool+0x1c'], [2089993149, 'ntdll.dll!RtlQueueWorkItem+0x4ce5'], [2088962678, 'kernel32.dll!QueueUserWorkItem+0x14'], [4204696, 'chrome.exe!InitCrashReporter+0x178 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:250 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 26.361730000000001, 'cpu': 2147742720}, -{'stacktrace': [], 'thread': 3380, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718060360, 'startaddr': 2089974157, 'ms': 26.482137000000002, 'cpu': 3124053392}, -{'eventid': 1718062684, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2089982839, 'ntdll.dll!RtlpStartWorkerThread+0x16'], [2089982906, 'ntdll.dll!RtlQueueWorkItem+0x24e2'], [2088962678, 'kernel32.dll!QueueUserWorkItem+0x14'], [4204696, 'chrome.exe!InitCrashReporter+0x178 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:250 ]'], [4205528, 'chrome.exe!wWinMain+0x2b8 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:95 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 26.58634, 'cpu': 2147742720}, -{'stacktrace': [], 'thread': 2440, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718062684, 'startaddr': 2089879392, 'ms': 26.691939999999999, 'cpu': 3124053392}, -{'stacktrace': [[2089816139, 'ntdll.dll!RtlEnterCriticalSection+0x46'], [2088809487, 'kernel32.dll!GetModuleFileNameW+0x3a'], [2089167589, 'kernel32.dll!FillUEFInfo+0x51'], [2089043624, 'kernel32.dll!SetUnhandledExceptionFilter+0x2b'], [4203570, 'chrome.exe!InitCrashReporterThread+0x1b2 [ c:\\g\\trunk\\src\\chrome\\app\\breakpad.cc:181 ]'], [2089973061, 'ntdll.dll!RtlpWorkerCallout+0x65'], [2089973123, 'ntdll.dll!RtlpExecuteWorkerRequest+0x1a'], [2089973317, 'ntdll.dll!RtlpApcCallout+0x11'], [2089973276, 'ntdll.dll!RtlpWorkerThread+0x16ebc'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2440, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 51.803511, 'ms': 26.820167999999999, 'syscallargs': [120, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2089934922, 'ntdll.dll!LdrpMapDll+0x1b0b'], [2089902193, 'ntdll.dll!LdrpLoadDll+0xfffffd48'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 137, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwProtectVirtualMemory', 'done': 44.387484999999998, 'ms': 43.193758000000003, 'syscallargs': [4294967295, 1242540, 1242544], 'cpu': 2147742720}, -{'stacktrace': [[2088853969, 'kernel32.dll!CsrBasepCreateActCtx+0xa2'], [2088853339, 'kernel32.dll!BasepCreateActCtx+0x63a'], [2088851440, 'kernel32.dll!CreateActCtxW+0x394'], [2088959197, 'kernel32.dll!BasepProbeForDllManifest+0x1eacd'], [2089928717, 'ntdll.dll!LdrpWalkImportDescriptor+0x84'], [2089902276, 'ntdll.dll!LdrpLoadDll+0xfffffd9b'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 45.075840999999997, 'ms': 44.847599000000002, 'syscallargs': [32, 1240632, 1240632], 'cpu': 2147742720}, -{'stacktrace': [[2011010674, 'ADVAPI32.dll!GatherRandomKeyFastUserMode+0xba'], [2011006756, 'ADVAPI32.dll!RandomFillBuffer+0xa3'], [2011006564, 'ADVAPI32.dll!GenRandom+0x25'], [2011006503, 'ADVAPI32.dll!NewGenRandomEx+0x4d'], [2011006415, 'ADVAPI32.dll!NewGenRandom+0x34'], [2011006354, 'ADVAPI32.dll!SystemFunction036+0x14'], [2011652938, 'RPCRT4.dll!GenerateRandomNumber+0x2ff'], [2011652709, 'RPCRT4.dll!UuidCreate+0x11'], [2001932179, 'ole32.dll!DllMain+0x33e86'], [2001719529, 'ole32.dll!_DllMainCRTStartup+0x48'], [2089816487, 'ntdll.dll!LdrpCallInitRoutine+0x14'], [2089929643, 'ntdll.dll!LdrpRunInitializeRoutines+0x1c7'], [2089902456, 'ntdll.dll!LdrpLoadDll+0xfffffe4f'], [2089902810, 'ntdll.dll!LdrLoadDll+0x110'], [2088770489, 'kernel32.dll!LoadLibraryExW+0xc8'], [4205549, 'chrome.exe!wWinMain+0x2cd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:99 ]']], 'thread': 3956, 'syscall': 66, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwDeviceIoControlFile', 'done': 47.469441000000003, 'ms': 47.221643999999998, 'syscallargs': [128, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2440, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 146.87732700000001, 'ms': 51.840667000000003, 'syscallargs': [112, 13500332, 13500336], 'cpu': 3124053392}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [2001923724, 'ole32.dll!InitMainThreadWnd+0x3c'], [2001727537, 'ole32.dll!CoInitializeEx+0xc6'], [2001729284, 'ole32.dll!OleInitializeEx+0x12'], [2001729257, 'ole32.dll!OleInitialize+0xf'], [19354461, 'chrome.dll!ChromeMain+0x7dd [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:223 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 53.857683000000002, 'ms': 53.325772000000001, 'syscallargs': [0, 49208, 49208], 'cpu': 2147742720}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [20401225, 'chrome.dll!BrowserMain+0xc9 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:294 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chromium_BrowserMain', 'ms': 54.000996999999998, 'cpu': 2147742720}, -{'eventid': 1718170996, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [20506130, 'chrome.dll!BrowserProcessImpl::CreateFileThread+0xa2 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:300 ]'], [20398585, 'chrome.dll!BrowserProcessImpl::file_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:61 ]'], [20852807, 'chrome.dll!ProfileImpl::GetPrefs+0xc7 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:720 ]'], [20855066, 'chrome.dll!ProfileImpl::ProfileImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:565 ]'], [20856220, 'chrome.dll!Profile::CreateProfile+0x1c [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:69 ]'], [20602496, 'chrome.dll!ProfileManager::GetDefaultProfile+0x1c0 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:96 ]'], [20402403, 'chrome.dll!BrowserMain+0x563 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:374 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 59.869340999999999, 'cpu': 2147742720}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [23799422, 'chrome.dll!base::Thread::StartWithOptions+0xee [ c:\\g\\trunk\\src\\base\\thread.cc:91 ]'], [20506130, 'chrome.dll!BrowserProcessImpl::CreateFileThread+0xa2 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:300 ]'], [20398585, 'chrome.dll!BrowserProcessImpl::file_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:61 ]'], [20852807, 'chrome.dll!ProfileImpl::GetPrefs+0xc7 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:720 ]'], [20855066, 'chrome.dll!ProfileImpl::ProfileImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:565 ]'], [20856220, 'chrome.dll!Profile::CreateProfile+0x1c [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:69 ]'], [20602496, 'chrome.dll!ProfileManager::GetDefaultProfile+0x1c0 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:96 ]'], [20402403, 'chrome.dll!BrowserMain+0x563 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:374 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 60.171892999999997, 'ms': 59.965162999999997, 'syscallargs': [152, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [], 'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718170996, 'startaddr': 19417280, 'ms': 60.031652000000001, 'cpu': 3124053392}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_FileThread', 'ms': 60.136972999999998, 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 64.683081000000001, 'ms': 60.200668, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [[2089175867, 'kernel32.dll!CreateToolhelp32Snapshot+0x2c'], [19416396, 'chrome.dll!process_util::KillProcesses+0x6c [ c:\\g\\trunk\\src\\base\\process_util_win.cc:296 ]'], [20567056, 'chrome.dll!BrowserInit::MessageWindow::HuntForZombieChromeProcesses+0x40 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:367 ]'], [20403945, 'chrome.dll!BrowserMain+0xb69 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:444 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 173, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtQuerySystemInformation', 'done': 61.949773, 'ms': 61.741366999999997, 'syscallargs': [5, 15859712, 65536], 'cpu': 2147742720}, -{'eventid': 1718192188, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [20819991, 'chrome.dll!chrome_browser_net::DnsMaster::PreLockedCreateNewSlaveIfNeeded+0x87 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:303 ]'], [20824704, 'chrome.dll!chrome_browser_net::DnsMaster::Resolve+0x30 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:70 ]'], [20522363, 'chrome.dll!chrome_browser_net::DnsPrefetchHostNamesAtStartup+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_global.cc:430 ]'], [20404113, 'chrome.dll!BrowserMain+0xc11 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:462 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 63.390737999999999, 'cpu': 2147742720}, -{'stacktrace': [], 'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718192188, 'startaddr': 21429184, 'ms': 63.532375999999999, 'cpu': 3124053392}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [21429081, 'chrome.dll!chrome_browser_net::DnsSlave::Run+0xa9 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:57 ]'], [21429195, 'chrome.dll!chrome_browser_net::DnsSlave::ThreadStart+0xb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:45 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'dns_prefetcher_1_of_8', 'ms': 63.553328999999998, 'cpu': 3124053392}, -{'eventid': 1718197540, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [4216426, 'chrome.exe!sandbox::BrokerServicesBase::Init+0x5a [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:70 ]'], [20404275, 'chrome.dll!BrowserMain+0xcb3 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:523 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 63.831575999999998, 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 133.03087400000001, 'ms': 64.752364, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [], 'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718197540, 'startaddr': 4215808, 'ms': 64.816618000000005, 'cpu': 3124053392}, -{'eventid': 1718207424, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [20505911, 'chrome.dll!BrowserProcessImpl::CreateIOThread+0xa7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:287 ]'], [20398537, 'chrome.dll!BrowserProcessImpl::io_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:54 ]'], [20576442, 'chrome.dll!InstallJankometer+0x19a [ c:\\g\\trunk\\src\\chrome\\browser\\jankometer.cc:210 ]'], [20404892, 'chrome.dll!BrowserMain+0xf1c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:565 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 64.829469000000003, 'cpu': 2147742720}, -{'stacktrace': [[4340339, 'chrome.exe!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [4215848, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x28 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:147 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'BrokerEventThread', 'ms': 64.838966999999997, 'cpu': 3124053392}, -{'stacktrace': [[4215906, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x62 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:151 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 115.701297, 'ms': 64.856288000000006, 'syscallargs': [168, 17039276, 17038976], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [23799422, 'chrome.dll!base::Thread::StartWithOptions+0xee [ c:\\g\\trunk\\src\\base\\thread.cc:91 ]'], [20505911, 'chrome.dll!BrowserProcessImpl::CreateIOThread+0xa7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:287 ]'], [20398537, 'chrome.dll!BrowserProcessImpl::io_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:54 ]'], [20576442, 'chrome.dll!InstallJankometer+0x19a [ c:\\g\\trunk\\src\\chrome\\browser\\jankometer.cc:210 ]'], [20404892, 'chrome.dll!BrowserMain+0xf1c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:565 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 65.134815000000003, 'ms': 64.898751000000004, 'syscallargs': [192, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [], 'thread': 708, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718207424, 'startaddr': 19417280, 'ms': 64.96105, 'cpu': 3124053392}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_IOThread', 'ms': 65.062179999999998, 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 101.74421599999999, 'ms': 65.212478000000004, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27144714, 'chrome.dll!views::ContainerWin::Init+0x11a [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:161 ]'], [27116867, 'chrome.dll!views::Window::Init+0x93 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:305 ]'], [27291723, 'chrome.dll!views::CustomFrameWindow::Init+0x3b [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:917 ]'], [23006205, 'chrome.dll!BrowserFrame::CreateForBrowserView+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:58 ]'], [23006465, 'chrome.dll!BrowserWindow::CreateBrowserWindow+0x51 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:34 ]'], [20656275, 'chrome.dll!Browser::Browser+0x263 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:229 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 72.739132999999995, 'ms': 70.077900999999997, 'syscallargs': [0, 1241012, 1239776], 'cpu': 2147742720}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [23834872, 'chrome.dll!ConditionVariable::TimedWait+0xb8 [ c:\\g\\trunk\\src\\base\\condition_variable_win.cc:66 ]'], [23834961, 'chrome.dll!ConditionVariable::Wait+0x21 [ c:\\g\\trunk\\src\\base\\condition_variable_win.cc:48 ]'], [20821313, 'chrome.dll!chrome_browser_net::DnsMaster::GetNextAssignment+0x31 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:245 ]'], [21429120, 'chrome.dll!chrome_browser_net::DnsSlave::Run+0xd0 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:63 ]'], [21429195, 'chrome.dll!chrome_browser_net::DnsSlave::ThreadStart+0xb [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_slave.cc:45 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2812, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 302.163543, 'ms': 70.703958, 'syscallargs': [232, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27264799, 'chrome.dll!views::TooltipManager::Init+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\tooltip_manager.cc:114 ]'], [27145071, 'chrome.dll!views::ContainerWin::Init+0x27f [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:187 ]'], [27116867, 'chrome.dll!views::Window::Init+0x93 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:305 ]'], [27291723, 'chrome.dll!views::CustomFrameWindow::Init+0x3b [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:917 ]'], [23006205, 'chrome.dll!BrowserFrame::CreateForBrowserView+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:58 ]'], [23006465, 'chrome.dll!BrowserWindow::CreateBrowserWindow+0x51 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_window_factory.cc:34 ]'], [20656275, 'chrome.dll!Browser::Browser+0x263 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:229 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 74.146016000000003, 'ms': 72.944186999999999, 'syscallargs': [32, 1240832, 1239596], 'cpu': 3124053392}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27969145, 'chrome.dll!ATL::CWindowImplBaseT >::Create+0xb9 [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3139 ]'], [21304605, 'chrome.dll!ATL::CWindowImpl,ATL::CWinTraits<1342177664,0> >::Create+0x6d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3215 ]'], [21312331, 'chrome.dll!AutocompleteEditView::AutocompleteEditView+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\autocomplete\\autocomplete_edit.cc:694 ]'], [23005496, 'chrome.dll!LocationBarView::Init+0x168 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:131 ]'], [23207043, 'chrome.dll!BrowserToolbarView::CreateCenterStack+0x253 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:186 ]'], [23210088, 'chrome.dll!BrowserToolbarView::Init+0x18 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:96 ]'], [23149860, 'chrome.dll!BrowserView2::Init+0x134 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:283 ]'], [23145656, 'chrome.dll!BrowserView2::ViewHierarchyChanged+0x38 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:788 ]'], [27129880, 'chrome.dll!views::View::PropagateAddNotifications+0x88 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:674 ]'], [27131408, 'chrome.dll!views::View::AddChildView+0xb0 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:585 ]'], [27131647, 'chrome.dll!views::View::AddChildView+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:561 ]'], [23201897, 'chrome.dll!OpaqueNonClientView::ViewHierarchyChanged+0xd9 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_non_client_view.cc:670 ]'], [27129880, 'chrome.dll!views::View::PropagateAddNotifications+0x88 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:674 ]'], [27131408, 'chrome.dll!views::View::AddChildView+0xb0 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:585 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 88.230208000000005, 'ms': 86.457915999999997, 'syscallargs': [0, 49640, 49640], 'cpu': 2147742720}, -{'stacktrace': [[27278917, 'chrome.dll!views::HWNDView::DidChangeBounds+0x5 [ c:\\g\\trunk\\src\\chrome\\views\\hwnd_view.cc:137 ]'], [21099029, 'chrome.dll!views::View::SetBounds+0x45 [ c:\\g\\trunk\\src\\chrome\\views\\view.h:164 ]'], [23005111, 'chrome.dll!LocationBarView::DoLayout+0x227 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:431 ]'], [23006103, 'chrome.dll!LocationBarView::Layout+0x7 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\location_bar_view.cc:218 ]'], [21099029, 'chrome.dll!views::View::SetBounds+0x45 [ c:\\g\\trunk\\src\\chrome\\views\\view.h:164 ]'], [23203355, 'chrome.dll!BrowserToolbarView::Layout+0x20b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\toolbar_view.cc:311 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [23143722, 'chrome.dll!BrowserView2::LayoutToolbar+0xea [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:920 ]'], [23143963, 'chrome.dll!BrowserView2::Layout+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:768 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [23198989, 'chrome.dll!OpaqueNonClientView::Layout+0x4d [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_non_client_view.cc:633 ]'], [27117623, 'chrome.dll!views::View::DidChangeBounds+0x7 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:192 ]'], [27138473, 'chrome.dll!views::FillLayout::Layout+0x69 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:57 ]'], [27122596, 'chrome.dll!views::View::Layout+0x14 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:214 ]'], [27142349, 'chrome.dll!views::ContainerWin::ChangeSize+0x8d [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:815 ]'], [27141386, 'chrome.dll!views::ContainerWin::SetContentsView+0xea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:214 ]']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 97.329130000000006, 'ms': 96.881028000000001, 'syscallargs': [8979080, 0, 137], 'cpu': 3124053392}, -{'eventid': 1718457244, 'stacktrace': [[2088839620, 'kernel32.dll!BaseCreateThreadPoolThread+0x44'], [2089982739, 'ntdll.dll!RtlpStartThreadpoolThread+0x4e'], [2090037459, 'ntdll.dll!RtlpStartWaitThread+0x51'], [2090031864, 'ntdll.dll!RtlRegisterWait+0x105'], [2088899101, 'kernel32.dll!RegisterWaitForSingleObject+0x50'], [27049362, 'chrome.dll!WorkerThreadTicker::Start+0xc2 [ c:\\g\\trunk\\src\\chrome\\common\\worker_thread_ticker.cc:66 ]'], [20653873, 'chrome.dll!Browser::InitHangMonitor+0xd1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1579 ]'], [20656498, 'chrome.dll!Browser::Browser+0x342 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:247 ]'], [20564706, 'chrome.dll!BrowserInit::LaunchWithProfile::CreateTabbedBrowser+0x52 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:489 ]'], [20567260, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x9c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:536 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 98.261930000000007, 'cpu': 3124053392}, -{'stacktrace': [], 'thread': 3500, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718457244, 'startaddr': 2089983918, 'ms': 98.425916999999998, 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.631327, 'ms': 98.535987000000006, 'syscallargs': [2, 32505136, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [27264799, 'chrome.dll!views::TooltipManager::Init+0x2f [ c:\\g\\trunk\\src\\chrome\\views\\tooltip_manager.cc:114 ]'], [27145071, 'chrome.dll!views::ContainerWin::Init+0x27f [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:187 ]'], [21603024, 'chrome.dll!WebContentsViewWin::CreateView+0x20 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents_view_win.cc:61 ]'], [21357991, 'chrome.dll!TabContents::CreateWithType+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents_factory.cc:92 ]'], [20652484, 'chrome.dll!Browser::CreateTabContentsForURL+0xb4 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1349 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 99.715187, 'ms': 99.146679000000006, 'syscallargs': [32, 1240616, 1239380], 'cpu': 3124053392}, -{'eventid': 1718479108, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20506336, 'chrome.dll!BrowserProcessImpl::CreateDBThread+0x90 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:311 ]'], [20398633, 'chrome.dll!BrowserProcessImpl::db_thread+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:68 ]'], [20857407, 'chrome.dll!ProfileImpl::RequestContext::RequestContext+0x2ef [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:144 ]'], [20862571, 'chrome.dll!ProfileImpl::GetRequestContext+0x11b [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:739 ]'], [20852186, 'chrome.dll!ProfileImpl::InitializeSpellChecker+0xfa [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:929 ]'], [20852480, 'chrome.dll!ProfileImpl::GetSpellChecker+0x10 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:960 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 101.072622, 'cpu': 3124053392}, -{'stacktrace': [], 'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718479108, 'startaddr': 19417280, 'ms': 101.217613, 'cpu': 2147742720}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_DBThread', 'ms': 101.24918099999999, 'cpu': 2147742720}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 299.45342199999999, 'ms': 101.293041, 'syscallargs': [284, 0, 0], 'cpu': 2147742720}, -{'eventid': 1718482060, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20811109, 'chrome.dll!SafeBrowsingService::Start+0xa5 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:61 ]'], [20812754, 'chrome.dll!SafeBrowsingService::Initialize+0x72 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:54 ]'], [20696885, 'chrome.dll!ResourceDispatcherHost::Initialize+0x75 [ c:\\g\\trunk\\src\\chrome\\browser\\resource_dispatcher_host.cc:1439 ]'], [20505550, 'chrome.dll!BrowserProcessImpl::CreateResourceDispatcherHost+0xae [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:263 ]'], [20398441, 'chrome.dll!BrowserProcessImpl::resource_dispatcher_host+0x19 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.h:40 ]'], [20390068, 'chrome.dll!RenderProcessHost::Init+0xa4 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:223 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 101.49222899999999, 'cpu': 3124053392}, -{'stacktrace': [], 'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718482060, 'startaddr': 19417280, 'ms': 101.625765, 'cpu': 2147742720}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_SafeBrowsingThread', 'ms': 101.65426100000001, 'cpu': 2147742720}, -{'stacktrace': [[2011711194, 'RPCRT4.dll!NMP_Open+0x122'], [2011709069, 'RPCRT4.dll!OSF_CCONNECTION::TransOpen+0x5e'], [2011710455, 'RPCRT4.dll!OSF_CCONNECTION::OpenConnectionAndBind+0x98'], [2011710849, 'RPCRT4.dll!OSF_CCALL::BindToServer+0x88'], [2011710672, 'RPCRT4.dll!OSF_BINDING_HANDLE::AllocateCCall+0x4b04'], [2011691420, 'RPCRT4.dll!OSF_BINDING_HANDLE::NegotiateTransferSyntax+0x28'], [2011664833, 'RPCRT4.dll!I_RpcGetBufferWithObject+0x48'], [2011664888, 'RPCRT4.dll!I_RpcGetBuffer+0xf'], [2011666469, 'RPCRT4.dll!NdrGetBuffer+0x28'], [2012169739, 'RPCRT4.dll!NdrClientCall2+0x13b'], [2011045072, 'ADVAPI32.dll!LsarOpenPolicy2+0x1b'], [2011044946, 'ADVAPI32.dll!LsaOpenPolicy+0x43'], [2011053296, 'ADVAPI32.dll!InitializeSidLookupTable+0xef'], [2011049382, 'ADVAPI32.dll!LocalConvertStringSDToSD_Rev1+0x7a'], [2011049228, 'ADVAPI32.dll!ConvertStringSecurityDescriptorToSecurityDescriptorW+0x2e'], [19488210, 'chrome.dll!win_util::GetLogonSessionOnlyDACL+0x1a2 [ c:\\g\\trunk\\src\\base\\win_util.cc:227 ]']], 'thread': 3956, 'syscall': 224, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwSetInformationFile', 'done': 102.443746, 'ms': 102.131416, 'syscallargs': [340, 1236548, 1236564], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.014769, 'ms': 102.43620300000001, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[19462999, 'chrome.dll!file_util::ReadFile+0x77 [ c:\\g\\trunk\\src\\base\\file_util_win.cc:508 ]'], [21425417, 'chrome.dll!SafeBrowsingDatabase::LoadBloomFilter+0xe9 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_database.cc:81 ]'], [21806924, 'chrome.dll!SafeBrowsingDatabaseImpl::Init+0xfc [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_database_impl.cc:105 ]'], [20805565, 'chrome.dll!SafeBrowsingService::GetDatabase+0x16d [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:381 ]'], [20807180, 'chrome.dll!SafeBrowsingService::OnDBInitialize+0x6c [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:106 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 103.483823, 'ms': 102.872013, 'syscallargs': [340, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 103.86767, 'ms': 103.13768899999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118302493, 'USER32.dll!CreateDesktopW+0x42'], [20392388, 'chrome.dll!RenderProcessHost::Init+0x9b4 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:374 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]']], 'thread': 3956, 'syscall': 4436, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateDesktop', 'done': 103.842527, 'ms': 103.254464, 'syscallargs': [1239256, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [20805662, 'chrome.dll!SafeBrowsingService::GetDatabase+0x1ce [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:383 ]'], [20807180, 'chrome.dll!SafeBrowsingService::OnDBInitialize+0x6c [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:106 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 103.852026, 'ms': 103.507289, 'syscallargs': [6685238, 1025, 13825696], 'cpu': 3124053392}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 115.36522100000001, 'ms': 103.633562, 'syscallargs': [4, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2136, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 299.48722500000002, 'ms': 103.86012700000001, 'syscallargs': [292, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 118.02812900000001, 'ms': 104.123289, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'eventid': 1718553012, 'stacktrace': [[2011134008, 'ADVAPI32.dll!CreateProcessAsUserW+0xc3'], [4226929, 'chrome.exe!sandbox::TargetProcess::Create+0xe1 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:158 ]'], [4215094, 'chrome.exe!sandbox::BrokerServicesBase::SpawnTarget+0x146 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:262 ]'], [20393087, 'chrome.dll!RenderProcessHost::Init+0xc6f [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:400 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830565, 'ms': 109.568395, 'cpu': 3124053392}, -{'stacktrace': [[2088869567, 'kernel32.dll!CreateProcessInternalW+0x9ac'], [2011134008, 'ADVAPI32.dll!CreateProcessAsUserW+0xc3'], [4226929, 'chrome.exe!sandbox::TargetProcess::Create+0xe1 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:158 ]'], [4215094, 'chrome.exe!sandbox::BrokerServicesBase::SpawnTarget+0x146 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:262 ]'], [20393087, 'chrome.dll!RenderProcessHost::Init+0xc6f [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:400 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]']], 'thread': 3956, 'syscall': 200, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtRequestWaitReplyPort', 'done': 112.819925, 'ms': 109.602198, 'syscallargs': [32, 1237344, 1237344], 'cpu': 3124053392}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 132.609871, 'ms': 115.64011600000001, 'syscallargs': [11, 32505136, 1], 'cpu': 2147742720}, -{'stacktrace': [[4216265, 'chrome.exe!sandbox::BrokerServicesBase::TargetEventsThread+0x1c9 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:151 ]'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2428, 'syscall': 190, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwRemoveIoCompletion', 'waiting': 1, 'done': 304.12608299999999, 'ms': 115.711634, 'syscallargs': [168, 17039276, 17038976], 'cpu': 2147742720}, -{'stacktrace': [[20454796, 'chrome.dll!VisitedLinkMaster::ReadFromFile+0x2c [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:966 ]'], [20463804, 'chrome.dll!VisitedLinkMaster::InitFromFile+0x18c [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:577 ]'], [20464344, 'chrome.dll!VisitedLinkMaster::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\visitedlink_master.cc:256 ]'], [20393352, 'chrome.dll!RenderProcessHost::Init+0xd78 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:438 ]'], [21339442, 'chrome.dll!RenderViewHost::CreateRenderView+0x82 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:123 ]'], [21021101, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x2d [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1367 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]']], 'thread': 3956, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 116.641361, 'ms': 115.943507, 'syscallargs': [428, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 126.694035, 'ms': 118.164739, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [21895768, 'chrome.dll!RenderWidgetHostViewWin::EnsureTooltip+0x58 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:897 ]'], [21896123, 'chrome.dll!RenderWidgetHostViewWin::SetSize+0x3b [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:140 ]'], [21021157, 'chrome.dll!WebContents::CreateRenderViewForRenderManager+0x65 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:1374 ]'], [21556055, 'chrome.dll!RenderViewHostManager::Navigate+0x57 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:103 ]'], [21021786, 'chrome.dll!WebContents::NavigateToPendingEntry+0x1a [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:354 ]'], [21011780, 'chrome.dll!NavigationController::NavigateToPendingEntry+0x144 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:1040 ]'], [21012234, 'chrome.dll!NavigationController::LoadEntry+0x6a [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:276 ]'], [21013144, 'chrome.dll!NavigationController::LoadURL+0x28 [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:520 ]'], [20652523, 'chrome.dll!Browser::CreateTabContentsForURL+0xdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1358 ]'], [20651898, 'chrome.dll!Browser::AddTabWithURL+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1228 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 125.14244100000001, 'ms': 124.58874, 'syscallargs': [32, 1240148, 1238912], 'cpu': 2147742720}, -{'stacktrace': [[19469642, 'chrome.dll!base::MessagePumpForIO::ProcessNextObject+0xba [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:668 ]'], [19470272, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x70 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:537 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 127.571521, 'ms': 126.896575, 'syscallargs': [1, 18349136, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 129.02449899999999, 'ms': 127.671254, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[27279557, 'chrome.dll!views::HWNDView::Attach+0x95 [ c:\\g\\trunk\\src\\chrome\\views\\hwnd_view.cc:46 ]'], [23096819, 'chrome.dll!TabContentsContainerView::SetTabContents+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\tab_contents_container_view.cc:83 ]'], [23148817, 'chrome.dll!BrowserView2::TabSelectedAt+0x81 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:530 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]'], [20651916, 'chrome.dll!Browser::AddTabWithURL+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1232 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 129.14797799999999, 'ms': 128.71188900000001, 'syscallargs': [24969860, 0, 5], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 147.204184, 'ms': 129.097972, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2088925701, 'kernel32.dll!BasepCopyFileExW+0x3f2'], [2088926059, 'kernel32.dll!CopyFileExW+0x39'], [2088958097, 'kernel32.dll!CopyFileW+0x1e'], [19457905, 'chrome.dll!base::CopyFileW+0x41 [ c:\\g\\trunk\\src\\base\\file_util_win.cc:115 ]'], [19447294, 'chrome.dll!base::CopyFileW+0x2e [ c:\\g\\trunk\\src\\base\\file_util.cc:324 ]'], [21848115, 'chrome.dll!BookmarkStorageBackend::BookmarkStorageBackend+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:123 ]'], [21848622, 'chrome.dll!BookmarkStorage::BookmarkStorage+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:41 ]'], [21452155, 'chrome.dll!BookmarkModel::Load+0xcb [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:137 ]'], [20848903, 'chrome.dll!ProfileImpl::GetBookmarkModel+0x47 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:853 ]'], [22957786, 'chrome.dll!BookmarkBarView::BookmarkBarView+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:692 ]'], [23141288, 'chrome.dll!BrowserView2::GetBookmarkBarView+0x48 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:444 ]'], [23147457, 'chrome.dll!BrowserView2::UpdateUIForContents+0x11 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1020 ]'], [23148906, 'chrome.dll!BrowserView2::TabSelectedAt+0xda [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:538 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]']], 'thread': 3956, 'syscall': 37, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtCreateFile', 'done': 132.690607, 'ms': 132.46627699999999, 'syscallargs': [1238200, 1074856064, 1237976], 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 146.83514199999999, 'ms': 132.61238499999999, 'syscallargs': [12, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [21849655, 'chrome.dll!BookmarkStorage::LoadBookmarks+0x87 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:53 ]'], [21452202, 'chrome.dll!BookmarkModel::Load+0xfa [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:138 ]'], [20848903, 'chrome.dll!ProfileImpl::GetBookmarkModel+0x47 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:853 ]'], [22957786, 'chrome.dll!BookmarkBarView::BookmarkBarView+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:692 ]'], [23141288, 'chrome.dll!BrowserView2::GetBookmarkBarView+0x48 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:444 ]'], [23147457, 'chrome.dll!BrowserView2::UpdateUIForContents+0x11 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1020 ]'], [23148906, 'chrome.dll!BrowserView2::TabSelectedAt+0xda [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:538 ]'], [21206163, 'chrome.dll!TabStripModel::ChangeSelectedContentsFrom+0xe3 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:585 ]'], [21208866, 'chrome.dll!TabStripModel::InsertTabContentsAt+0x142 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:103 ]'], [21209292, 'chrome.dll!TabStripModel::AddTabContents+0xac [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:378 ]'], [20651916, 'chrome.dll!Browser::AddTabWithURL+0x13c [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:1232 ]'], [20567357, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0xfd [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:540 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 135.53007400000001, 'ms': 133.02305200000001, 'syscallargs': [8585726, 1025, 13802976], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 220.41153299999999, 'ms': 135.494316, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [[27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4651, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserShowWindow', 'done': 166.489037, 'ms': 135.654112, 'syscallargs': [9961988, 10, 13830668], 'cpu': 3124053392}, -{'stacktrace': [[27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]']], 'thread': 3956, 'syscall': 4583, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserRedrawWindow', 'done': 164.93828099999999, 'ms': 137.03361699999999, 'syscallargs': [9961988, 1240560, 0], 'cpu': 2147742720}, -{'stacktrace': [[27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]']], 'thread': 3956, 'syscall': 4404, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserBeginPaint', 'done': 147.41705999999999, 'ms': 137.187827, 'syscallargs': [9961988, 1239308, 0], 'cpu': 2147742720}, -{'stacktrace': [[2011005211, 'ADVAPI32.dll!RegEnumValueW+0x9a'], [1960473629, 'USP10.dll!CacheFontLinkingData+0x1e1'], [1960474061, 'USP10.dll!IsFontRegLinked+0x21'], [1960477397, 'USP10.dll!LoadFont+0x165'], [1960464506, 'USP10.dll!FindOrCreateFaceCache+0x9c'], [1960466474, 'USP10.dll!FindOrCreateSizeCacheWithoutRealizationID+0xc7'], [1960467102, 'USP10.dll!FindOrCreateSizeCacheUsingRealizationID+0x5d'], [1960468147, 'USP10.dll!UpdateCache+0x2c'], [1960468379, 'USP10.dll!ScriptCheckCache+0x67'], [1960460694, 'USP10.dll!ScriptStringAnalyse+0x143'], [1654409458, 'LPK.DLL!LpkStringAnalyse+0xfd'], [1654408779, 'LPK.DLL!LpkCharsetDraw+0x2f3'], [1654395497, 'LPK.DLL!LpkDrawTextEx+0x34'], [2118444036, 'USER32.dll!DT_DrawStr+0x30249'], [2118246821, 'USER32.dll!DT_DrawJustifiedLine+0x31'], [2118248132, 'USER32.dll!AddEllipsisAndDrawLine+0x5d']], 'thread': 3956, 'syscall': 73, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtEnumerateValueKey', 'done': 143.77721199999999, 'ms': 142.97459599999999, 'syscallargs': [508, 1, 1], 'cpu': 2147742720}, -{'stacktrace': [[2012320926, 'GDI32.dll!CreateFontIndirectW+0x46'], [1960473724, 'USP10.dll!CacheFontLinkingData+0x240'], [1960474061, 'USP10.dll!IsFontRegLinked+0x21'], [1960477397, 'USP10.dll!LoadFont+0x165'], [1960464506, 'USP10.dll!FindOrCreateFaceCache+0x9c'], [1960466474, 'USP10.dll!FindOrCreateSizeCacheWithoutRealizationID+0xc7'], [1960467102, 'USP10.dll!FindOrCreateSizeCacheUsingRealizationID+0x5d'], [1960468147, 'USP10.dll!UpdateCache+0x2c'], [1960468379, 'USP10.dll!ScriptCheckCache+0x67'], [1960460694, 'USP10.dll!ScriptStringAnalyse+0x143'], [1654409458, 'LPK.DLL!LpkStringAnalyse+0xfd'], [1654408779, 'LPK.DLL!LpkCharsetDraw+0x2f3'], [1654395497, 'LPK.DLL!LpkDrawTextEx+0x34'], [2118444036, 'USER32.dll!DT_DrawStr+0x30249'], [2118246821, 'USER32.dll!DT_DrawJustifiedLine+0x31'], [2118248132, 'USER32.dll!AddEllipsisAndDrawLine+0x5d']], 'thread': 3956, 'syscall': 4314, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiHfontCreate', 'done': 145.325174, 'ms': 143.78643099999999, 'syscallargs': [1233740, 356, 0], 'cpu': 2147742720}, -{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT::~CanvasPaintT+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27136650, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x8ea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:224 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 146.987955, 'ms': 146.60997399999999, 'syscallargs': [771819156, 0, 0], 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.033627, 'ms': 146.85358099999999, 'syscallargs': [12, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27136650, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x8ea [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:224 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 147.34358700000001, 'ms': 147.01589200000001, 'syscallargs': [2181367073, 14636032, 14636232], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 149.87212099999999, 'ms': 147.65116800000001, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 155.44461699999999, 'ms': 149.96458999999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT::~CanvasPaintT+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 153.59857199999999, 'ms': 153.273112, 'syscallargs': [771819156, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 153.84329600000001, 'ms': 153.641594, 'syscallargs': [2198144289, 14636032, 14636144], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [20447362, 'chrome.dll!RenderWidgetHelper::WaitForPaintMsg+0x102 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_helper.cc:121 ]'], [21729909, 'chrome.dll!RenderWidgetHost::GetBackingStore+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:742 ]'], [21898819, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0xa3 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:402 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 158.746712, 'ms': 154.248096, 'syscallargs': [260, 0, 1238856], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 158.69866099999999, 'ms': 155.524236, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 162.17675700000001, 'ms': 158.787779, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[21721107, 'chrome.dll!RenderWidgetHost::BackingStore::Refresh+0x133 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:95 ]'], [21726483, 'chrome.dll!RenderWidgetHost::BackingStoreManager::PrepareBackingStore+0x103 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:197 ]'], [21726586, 'chrome.dll!RenderWidgetHost::PaintRect+0x5a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:770 ]'], [21727344, 'chrome.dll!RenderWidgetHost::OnMsgPaintRect+0x250 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:379 ]'], [21728798, 'chrome.dll!IPC::MessageWithTuple::Dispatch >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7']], 'thread': 3956, 'syscall': 4389, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiStretchDIBitsInternal', 'done': 161.89711299999999, 'ms': 158.891423, 'syscallargs': [3825272163, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[21721114, 'chrome.dll!RenderWidgetHost::BackingStore::Refresh+0x13a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:96 ]'], [21726483, 'chrome.dll!RenderWidgetHost::BackingStoreManager::PrepareBackingStore+0x103 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:197 ]'], [21726586, 'chrome.dll!RenderWidgetHost::PaintRect+0x5a [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:770 ]'], [21727344, 'chrome.dll!RenderWidgetHost::OnMsgPaintRect+0x250 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host.cc:379 ]'], [21728798, 'chrome.dll!IPC::MessageWithTuple::Dispatch >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7']], 'thread': 3956, 'syscall': 267, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtUnmapViewOfSection', 'done': 162.12954400000001, 'ms': 161.902421, 'syscallargs': [4294967295, 43974656, 1239104], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 170.10988800000001, 'ms': 162.27425600000001, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[21898949, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:424 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27287730, 'chrome.dll!views::CustomFrameWindow::OnNCActivate+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\custom_frame_window.cc:1068 ]'], [23138561, 'chrome.dll!OpaqueFrame::OnNCActivate+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\opaque_frame.cc:104 ]'], [27136100, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x6c4 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:214 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 164.14181099999999, 'ms': 162.369798, 'syscallargs': [3389065955, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[27151840, 'chrome.dll!views::FocusWindowCallback+0x130 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:175 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27112751, 'chrome.dll!views::Window::Show+0xf [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:93 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 166.26107500000001, 'ms': 164.97012899999999, 'syscallargs': [9961988, 9961988, 13872320], 'cpu': 3124053392}, -{'stacktrace': [[2118254284, 'USER32.dll!_CreateWindowEx+0xb1'], [2118253656, 'USER32.dll!CreateWindowExW+0x33'], [2118563099, 'USER32.dll!CreateIMEUI+0xa4'], [2118566246, 'USER32.dll!ImeSetContextHandler+0x40'], [2118567660, 'USER32.dll!ImeWndProcWorker+0x2f6'], [2118304721, 'USER32.dll!SendMessageWorker+0x10bfe'], [2118431811, 'USER32.dll!RealDefWindowProcWorker+0x3022c'], [2118235129, 'USER32.dll!RealDefWindowProcW+0x27'], [2118235027, 'USER32.dll!DefWindowProcW+0x57'], [27142877, 'chrome.dll!views::ContainerWin::WndProc+0xdd [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:918 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28']], 'thread': 3956, 'syscall': 4439, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserCreateWindowEx', 'done': 165.93449699999999, 'ms': 165.35397699999999, 'syscallargs': [0, 1238728, 1237492], 'cpu': 3124053392}, -{'stacktrace': [[27208659, 'chrome.dll!views::RootView::FocusView+0xe3 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:499 ]'], [27118902, 'chrome.dll!views::View::RequestFocus+0x16 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:1423 ]'], [23139435, 'chrome.dll!BrowserView2::Show+0x1b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:304 ]'], [20641529, 'chrome.dll!Browser::ShowAndFit+0x29 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:335 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 168.39933600000001, 'ms': 166.56362799999999, 'syscallargs': [8979080, 27145854, 13872320], 'cpu': 3124053392}, -{'stacktrace': [[20641581, 'chrome.dll!Browser::ShowAndFit+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:351 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 170.63230100000001, 'ms': 168.406599, 'syscallargs': [24969860, 21048886, 13857560], 'cpu': 3124053392}, -{'stacktrace': [[27208659, 'chrome.dll!views::RootView::FocusView+0xe3 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:499 ]'], [27146912, 'chrome.dll!views::FocusManager::OnSetFocus+0x40 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:273 ]'], [27151783, 'chrome.dll!views::FocusWindowCallback+0xf7 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:158 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [20641581, 'chrome.dll!Browser::ShowAndFit+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:351 ]'], [20567444, 'chrome.dll!BrowserInit::LaunchWithProfile::OpenURLsInBrowser+0x154 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:544 ]'], [20570295, 'chrome.dll!BrowserInit::LaunchWithProfile::Launch+0x5d7 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:472 ]'], [20571326, 'chrome.dll!BrowserInit::LaunchBrowserImpl+0x2de [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:720 ]'], [20572818, 'chrome.dll!BrowserInit::ProcessCommandLine+0x522 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_init.cc:659 ]'], [20405083, 'chrome.dll!BrowserMain+0xfdb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:579 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 170.61889199999999, 'ms': 169.63636399999999, 'syscallargs': [9896426, 13833040, 27145854], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 170.620847, 'ms': 170.203755, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 171.51900599999999, 'ms': 170.68761499999999, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[2118226946, 'USER32.dll!PeekMessageW+0x167'], [19465953, 'chrome.dll!base::MessagePumpWin::ProcessPumpReplacementMessage+0x21 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:307 ]'], [19466558, 'chrome.dll!base::MessagePumpWin::ProcessMessageHelper+0x3e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:280 ]'], [19470020, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x44 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:364 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4570, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!PeekMessageW', 'done': 171.181253, 'ms': 170.81500600000001, 'syscallargs': [1242820, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 181.74991499999999, 'ms': 171.734117, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[27201618, 'chrome.dll!views::RootView::PaintNow+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:183 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4583, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserRedrawWindow', 'done': 176.42074600000001, 'ms': 171.76652300000001, 'syscallargs': [9961988, 1242600, 0], 'cpu': 3124053392}, -{'stacktrace': [[21898949, 'chrome.dll!RenderWidgetHostViewWin::OnPaint+0x125 [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.cc:424 ]'], [21900924, 'chrome.dll!RenderWidgetHostViewWin::ProcessWindowMessage+0xbc [ c:\\g\\trunk\\src\\chrome\\browser\\render_widget_host_view_win.h:76 ]'], [21752349, 'chrome.dll!ATL::CWindowImplBaseT >::WindowProc+0x5d [ c:\\program files\\microsoft visual studio 8\\vc\\atlmfc\\include\\atlwin.h:3078 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [27201618, 'chrome.dll!views::RootView::PaintNow+0x42 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:183 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 175.758092, 'ms': 174.02686700000001, 'syscallargs': [2231437465, 0, 0], 'cpu': 3124053392}, -{'eventid': 1718825704, 'stacktrace': [[2088830549, 'kernel32.dll!CreateThread+0x1e'], [19417542, 'chrome.dll!PlatformThread::Create+0x36 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:83 ]'], [23799365, 'chrome.dll!base::Thread::StartWithOptions+0xb5 [ c:\\g\\trunk\\src\\base\\thread.cc:82 ]'], [23799735, 'chrome.dll!base::Thread::Start+0x17 [ c:\\g\\trunk\\src\\base\\thread.cc:72 ]'], [20426734, 'chrome.dll!HistoryService::Init+0xe [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history.cc:128 ]'], [20850347, 'chrome.dll!ProfileImpl::GetHistoryService+0x6b [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:752 ]'], [21456458, 'chrome.dll!BookmarkModel::LoadFavIcon+0x7a [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:685 ]'], [21457734, 'chrome.dll!BookmarkNode::GetFavIcon+0x16 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:46 ]'], [22945986, 'chrome.dll!BookmarkBarView::CreateBookmarkButton+0x152 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:1486 ]'], [22951285, 'chrome.dll!BookmarkBarView::Loaded+0x95 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\bookmark_bar_view.cc:1210 ]'], [21458349, 'chrome.dll!BookmarkModel::DoneLoading+0x8d [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:524 ]'], [21461574, 'chrome.dll!BookmarkModel::OnBookmarkStorageLoadedBookmarks+0x166 [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_model.cc:468 ]'], [21847663, 'chrome.dll!BookmarkStorage::LoadedBookmarks+0x2f [ c:\\g\\trunk\\src\\chrome\\browser\\bookmarks\\bookmark_storage.cc:90 ]'], [21847724, 'chrome.dll!RunnableMethod >::Run+0x1c [ c:\\g\\trunk\\src\\base\\task.h:313 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'eventtype': 'EVENT_TYPE_CREATETHREAD', 'startaddr': 2088830553, 'ms': 177.017191, 'cpu': 3124053392}, -{'stacktrace': [], 'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADBEGIN', 'parenteventid': 1718825704, 'startaddr': 19417280, 'ms': 177.216937, 'cpu': 2147742720}, -{'stacktrace': [[19417443, 'chrome.dll!PlatformThread::SetName+0x63 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:62 ]'], [23799603, 'chrome.dll!base::Thread::ThreadMain+0x53 [ c:\\g\\trunk\\src\\base\\thread.cc:145 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADNAME', 'threadname': 'Chrome_HistoryThread', 'ms': 177.250461, 'cpu': 2147742720}, -{'stacktrace': [[27392208, 'chrome.dll!winRead+0x20 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os_win.c:1003 ]'], [27524918, 'chrome.dll!sqlite3OsRead+0x16 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os.c:39 ]'], [27491281, 'chrome.dll!sqlite3PagerLoadall+0x71 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:4512 ]'], [27324147, 'chrome.dll!sqlite3Preload+0x33 [ c:\\g\\trunk\\src\\third_party\\sqlite\\build.c:3381 ]'], [21199165, 'chrome.dll!history::HistoryDatabase::PrimeCache+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:106 ]'], [21200727, 'chrome.dll!history::HistoryDatabase::Init+0x117 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:71 ]'], [20616681, 'chrome.dll!history::HistoryBackend::InitImpl+0x1d9 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:508 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 192.485637, 'ms': 178.359261, 'syscallargs': [512, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 190.82481200000001, 'ms': 181.75131200000001, 'syscallargs': [9896426, 21722045, 14286272], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 182.32261399999999, 'ms': 181.84853100000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 182.77937600000001, 'ms': 182.413128, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 184.039592, 'ms': 182.86486099999999, 'syscallargs': [2, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 184.892214, 'ms': 183.500696, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 184.75420800000001, 'ms': 184.13038499999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 185.30260100000001, 'ms': 185.07575700000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 186.651376, 'ms': 185.397865, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 187.67385200000001, 'ms': 186.08454399999999, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 187.526906, 'ms': 186.76451900000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 187.99735699999999, 'ms': 187.62943300000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 188.40103999999999, 'ms': 188.08507800000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 189.66041799999999, 'ms': 188.47507200000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [21555953, 'chrome.dll!RenderViewHostManager::Shutdown+0xb1 [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host_manager.cc:84 ]'], [21036462, 'chrome.dll!WebContents::Destroy+0xee [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]']], 'thread': 3956, 'syscall': 4611, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetFocus', 'done': 190.59852599999999, 'ms': 189.094424, 'syscallargs': [9896426, 14286908, 27137217], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 190.48985300000001, 'ms': 189.77244300000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 191.10529399999999, 'ms': 190.58735100000001, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.03893500000001, 'ms': 191.18016399999999, 'syscallargs': [2, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[23141617, 'chrome.dll!BrowserView2::TabDetachedAt+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:513 ]'], [21209929, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x169 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:129 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]']], 'thread': 3956, 'syscall': 4651, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserShowWindow', 'done': 191.54417699999999, 'ms': 191.24218300000001, 'syscallargs': [24969860, 0, 13791504], 'cpu': 2147742720}, -{'stacktrace': [[23141617, 'chrome.dll!BrowserView2::TabDetachedAt+0x21 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:513 ]'], [21209929, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x169 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:129 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]']], 'thread': 3956, 'syscall': 4625, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetParent', 'done': 191.86209400000001, 'ms': 191.546412, 'syscallargs': [24969860, 0, 13791504], 'cpu': 2147742720}, -{'stacktrace': [[2118236921, 'USER32.dll!GetPropW+0x1e'], [27148313, 'chrome.dll!views::FocusManager::GetFocusManager+0x69 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:228 ]'], [27117841, 'chrome.dll!views::View::GetFocusManager+0x21 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:299 ]'], [27129730, 'chrome.dll!views::View::PropagateRemoveNotifications+0xb2 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:665 ]'], [27129647, 'chrome.dll!views::View::PropagateRemoveNotifications+0x5f [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:660 ]'], [27130426, 'chrome.dll!views::View::DoRemoveChildView+0x10a [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:642 ]'], [27130610, 'chrome.dll!views::View::RemoveChildView+0x12 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:604 ]'], [23146904, 'chrome.dll!BrowserView2::UpdateChildViewAndLayout+0xb8 [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:1049 ]'], [23148971, 'chrome.dll!BrowserView2::TabStripEmpty+0x2b [ c:\\g\\trunk\\src\\chrome\\browser\\views\\frame\\browser_view2.cc:545 ]'], [21209949, 'chrome.dll!TabStripModel::DetachTabContentsAt+0x17d [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:130 ]'], [21211607, 'chrome.dll!TabStripModel::Observe+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:522 ]'], [19680002, 'chrome.dll!NotificationService::Notify+0x2c2 [ c:\\g\\trunk\\src\\chrome\\common\\notification_service.cc:94 ]'], [21045731, 'chrome.dll!TabContents::Destroy+0x73 [ c:\\g\\trunk\\src\\chrome\\browser\\tab_contents.cc:93 ]'], [21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]']], 'thread': 3956, 'syscall': 4680, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserValidateHandleSecure', 'done': 206.04797500000001, 'ms': 193.17455200000001, 'syscallargs': [9961988, 1, 0], 'cpu': 2147742720}, -{'stacktrace': [[21036469, 'chrome.dll!WebContents::Destroy+0xf5 [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:312 ]'], [21008223, 'chrome.dll!NavigationController::Destroy+0x2df [ c:\\g\\trunk\\src\\chrome\\browser\\navigation_controller.cc:458 ]'], [21208053, 'chrome.dll!TabStripModel::InternalCloseTabContentsAt+0x175 [ c:\\g\\trunk\\src\\chrome\\browser\\tabs\\tab_strip_model.cc:560 ]'], [20661873, 'chrome.dll!Browser::CloseContents+0xa1 [ c:\\g\\trunk\\src\\chrome\\browser\\browser.cc:810 ]'], [21019423, 'chrome.dll!WebContents::Close+0x1f [ c:\\g\\trunk\\src\\chrome\\browser\\web_contents.cc:836 ]'], [21356349, 'chrome.dll!RenderViewHost::OnMessageReceived+0x1fd [ c:\\g\\trunk\\src\\chrome\\browser\\render_view_host.cc:616 ]'], [20394864, 'chrome.dll!RenderProcessHost::OnMessageReceived+0x170 [ c:\\g\\trunk\\src\\chrome\\browser\\render_process_host.cc:624 ]'], [21472487, 'chrome.dll!RunnableMethod > c+0x17 [ c:\\g\\trunk\\src\\base\\task.h:312 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 206.599163, 'ms': 206.26448300000001, 'syscallargs': [24969860, 14286184, 0], 'cpu': 2147742720}, -{'stacktrace': [[2118224400, 'USER32.dll!DispatchMessageW+0xf'], [27107759, 'chrome.dll!views::AcceleratorHandler::Dispatch+0x4f [ c:\\g\\trunk\\src\\chrome\\views\\accelerator_handler.cc:32 ]'], [19466592, 'chrome.dll!base::MessagePumpWin::ProcessMessageHelper+0x60 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:285 ]'], [19470020, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x44 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:364 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4453, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDispatchMessage', 'done': 213.76627500000001, 'ms': 207.22298499999999, 'syscallargs': [1242896, 1242896, 1242896], 'cpu': 2147742720}, -{'stacktrace': [[26995006, 'chrome.dll!gfx::BitmapPlatformDeviceWin::drawToHDC+0x9e [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:378 ]'], [21604437, 'chrome.dll!gfx::CanvasPaintT::~CanvasPaintT+0x55 [ c:\\g\\trunk\\src\\base\\gfx\\platform_canvas_win.h:127 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [2118224400, 'USER32.dll!DispatchMessageW+0xf'], [27107759, 'chrome.dll!views::AcceleratorHandler::Dispatch+0x4f [ c:\\g\\trunk\\src\\chrome\\views\\accelerator_handler.cc:32 ]']], 'thread': 3956, 'syscall': 4109, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!NtGdiBitBlt', 'done': 211.82440800000001, 'ms': 209.57859199999999, 'syscallargs': [2231437465, 5, 79], 'cpu': 2147742720}, -{'stacktrace': [[26996791, 'chrome.dll!gfx::BitmapPlatformDeviceWin::~BitmapPlatformDeviceWin+0x37 [ c:\\g\\trunk\\src\\base\\gfx\\bitmap_platform_device_win.cc:328 ]'], [23980661, 'chrome.dll!DeviceCM::~DeviceCM+0x35 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:83 ]'], [23986073, 'chrome.dll!SkCanvas::~SkCanvas+0x29 [ c:\\g\\trunk\\src\\skia\\sgl\\skcanvas.cpp:410 ]'], [27139267, 'chrome.dll!views::ContainerWin::OnPaint+0x13 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:623 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151927, 'chrome.dll!views::FocusWindowCallback+0x187 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:187 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [2118224400, 'USER32.dll!DispatchMessageW+0xf']], 'thread': 3956, 'syscall': 4218, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'gdi32.dll!DeleteObject', 'done': 213.752027, 'ms': 211.89536699999999, 'syscallargs': [3875865955, 14288496, 14663680], 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.63649699999999, 'ms': 214.08056099999999, 'syscallargs': [10, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[2089998945, 'ntdll.dll!RtlDeregisterWaitEx+0xe6'], [2088960121, 'kernel32.dll!UnregisterWaitEx+0x17'], [23815564, 'chrome.dll!base::ObjectWatcher::StopWatching+0x7c [ c:\\g\\trunk\\src\\base\\object_watcher.cc:84 ]'], [19696699, 'chrome.dll!IPC::SyncChannel::SyncContext::OnChannelClosed+0xb [ c:\\g\\trunk\\src\\chrome\\common\\ipc_sync_channel.cc:339 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470254, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x5e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:533 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 214.64711299999999, 'ms': 214.09145599999999, 'syscallargs': [2, 18348976, 1], 'cpu': 2147742720}, -{'stacktrace': [[27141588, 'chrome.dll!views::ContainerWin::Hide+0x14 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:350 ]'], [27116658, 'chrome.dll!views::Window::Close+0x32 [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:130 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4642, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserSetWindowPos', 'done': 214.54654199999999, 'ms': 214.19063, 'syscallargs': [9961988, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19407817, 'chrome.dll!MessageLoop::RunInternal+0xa9 [ c:\\g\\trunk\\src\\base\\message_loop.cc:192 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19409081, 'chrome.dll!MessageLoopForUI::Run+0x49 [ c:\\g\\trunk\\src\\base\\message_loop.cc:559 ]'], [20405134, 'chrome.dll!BrowserMain+0x100e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:583 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4451, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserDestroyWindow', 'done': 218.16459900000001, 'ms': 214.58872600000001, 'syscallargs': [9961988, 13966744, 0], 'cpu': 3124053392}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 220.37158400000001, 'ms': 214.64068800000001, 'syscallargs': [10, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[27117134, 'chrome.dll!views::Window::OnActivate+0xe [ c:\\g\\trunk\\src\\chrome\\views\\window.cc:364 ]'], [27134780, 'chrome.dll!views::ContainerWin::_ProcessWindowMessage+0x19c [ c:\\g\\trunk\\src\\chrome\\views\\container_win.h:184 ]'], [27142851, 'chrome.dll!views::ContainerWin::WndProc+0xc3 [ c:\\g\\trunk\\src\\chrome\\views\\container_win.cc:917 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118239807, 'USER32.dll!CallWindowProcAorW+0x51'], [2118239845, 'USER32.dll!CallWindowProcW+0x1b'], [27151819, 'chrome.dll!views::FocusWindowCallback+0x11b [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:173 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4536, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserGetWindowPlacement', 'done': 215.06532300000001, 'ms': 214.72868800000001, 'syscallargs': [9961988, 1241292, 13830668], 'cpu': 2147742720}, -{'stacktrace': [[2089816330, 'ntdll.dll!RtlLeaveCriticalSection+0x1d'], [22426797, 'chrome.dll!malloc+0x7a [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\malloc.c:163 ]']], 'thread': 2688, 'syscall': 220, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtSetEventBoostPriority', 'done': 215.099684, 'ms': 214.74600799999999, 'syscallargs': [264, 4248, 45021424], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 219.80195800000001, 'ms': 214.832053, 'syscallargs': [1, 18348996, 1], 'cpu': 2147742720}, -{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [27201478, 'chrome.dll!views::RootView::SchedulePaint+0xb6 [ c:\\g\\trunk\\src\\chrome\\views\\root_view.cc:109 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27119984, 'chrome.dll!views::View::SchedulePaint+0x60 [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:328 ]'], [27117948, 'chrome.dll!views::View::SchedulePaint+0x2c [ c:\\g\\trunk\\src\\chrome\\views\\view.cc:333 ]'], [27151048, 'chrome.dll!views::FocusManager::OnPostActivate+0x48 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:405 ]'], [27151840, 'chrome.dll!views::FocusWindowCallback+0x130 [ c:\\g\\trunk\\src\\chrome\\views\\focus_manager.cc:175 ]'], [2118223668, 'USER32.dll!InternalCallWinProc+0x28'], [2118223894, 'USER32.dll!UserCallWinProcCheckWow+0xb7'], [2118235328, 'USER32.dll!DispatchClientMessage+0x4d'], [2118235404, 'USER32.dll!__fnDWORD+0x24'], [2089872099, 'ntdll.dll!KiUserCallbackDispatcher+0x13'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470042, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0x5a [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:369 ]']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 215.729094, 'ms': 215.09437700000001, 'syscallargs': [9437720, 1025, 13662856], 'cpu': 2147742720}, -{'stacktrace': [[2089910840, 'ntdll.dll!RtlpExtendHeap+0x88'], [2089884790, 'ntdll.dll!RtlAllocateHeap+0x16a2'], [22426797, 'chrome.dll!malloc+0x7a [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\malloc.c:163 ]']], 'thread': 2688, 'syscall': 17, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtAllocateVirtualMemory', 'done': 216.601551, 'ms': 215.89811, 'syscallargs': [4294967295, 45020820, 0], 'cpu': 2147742720}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'eventtype': 'EVENT_TYPE_APC', 'func_addr_name': 'ntdll.dll!RtlpDeregisterWait+0x0', 'ret_addr': 2089872071, 'done': 220.35901200000001, 'func_addr': 2089998983, 'ms': 217.798351, 'cpu': 3124053392}, -{'stacktrace': [[2089999079, 'ntdll.dll!RtlpDeregisterWait+0x60'], [1717963930, 'failed'], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 219, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtSetEvent', 'done': 220.35677699999999, 'ms': 217.836904, 'syscallargs': [256, 0, 1465296], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19469071, 'chrome.dll!base::MessagePumpForIO::WaitForWork+0x18f [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:613 ]'], [19470371, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0xd3 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:562 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 285.42538200000001, 'ms': 219.85503700000001, 'syscallargs': [1, 18348996, 1], 'cpu': 3124053392}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 302.48732699999999, 'ms': 220.374098, 'syscallargs': [9, 32505136, 1], 'cpu': 3124053392}, -{'stacktrace': [[2089911260, 'ntdll.dll!RtlpDeCommitFreeBlock+0x672c'], [2089881290, 'ntdll.dll!RtlFreeHeap+0xa8d'], [22426564, 'chrome.dll!free+0x6e [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\free.c:110 ]'], [27028667, 'chrome.dll!PrefService::SavePersistentPrefs+0x15b [ c:\\g\\trunk\\src\\chrome\\common\\pref_service.cc:209 ]'], [20562380, 'chrome.dll!browser_shutdown::Shutdown+0x11c [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:118 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 83, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtFreeVirtualMemory', 'done': 221.13285300000001, 'ms': 220.45483400000001, 'syscallargs': [4294967295, 1242484, 1242488], 'cpu': 2147742720}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 287.21471600000001, 'ms': 221.18006600000001, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [23800270, 'chrome.dll!base::Thread::~Thread+0xe [ c:\\g\\trunk\\src\\base\\thread.cc:45 ]'], [20409619, 'chrome.dll!HistoryService::Cleanup+0xc3 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history.cc:174 ]'], [20855337, 'chrome.dll!ProfileImpl::~ProfileImpl+0xc9 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:605 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 285.39185800000001, 'ms': 221.208282, 'syscallargs': [516, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2088803065, 'kernel32.dll!VirtualFree+0x15'], [27491400, 'chrome.dll!sqlite3PagerLoadall+0xe8 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:4532 ]'], [27324147, 'chrome.dll!sqlite3Preload+0x33 [ c:\\g\\trunk\\src\\third_party\\sqlite\\build.c:3381 ]'], [21199165, 'chrome.dll!history::HistoryDatabase::PrimeCache+0x5d [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:106 ]'], [21200727, 'chrome.dll!history::HistoryDatabase::Init+0x117 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_database.cc:71 ]'], [20616681, 'chrome.dll!history::HistoryBackend::InitImpl+0x1d9 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:508 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2688, 'syscall': 83, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtFreeVirtualMemory', 'done': 227.42667, 'ms': 226.69361599999999, 'syscallargs': [4294967295, 45021524, 45021528], 'cpu': 2147742720}, -{'stacktrace': [[27392208, 'chrome.dll!winRead+0x20 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os_win.c:1003 ]'], [27524918, 'chrome.dll!sqlite3OsRead+0x16 [ c:\\g\\trunk\\src\\third_party\\sqlite\\os.c:39 ]'], [27484071, 'chrome.dll!readDbPage+0x37 [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:2811 ]'], [27491450, 'chrome.dll!sqlite3PagerAcquire+0x1a [ c:\\g\\trunk\\src\\third_party\\sqlite\\pager.c:3113 ]'], [27352637, 'chrome.dll!sqlite3BtreeGetPage+0x1d [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:938 ]'], [27358074, 'chrome.dll!moveToChild+0x2a [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:2971 ]'], [27358534, 'chrome.dll!moveToLeftmost+0x36 [ c:\\g\\trunk\\src\\third_party\\sqlite\\btree.c:3086 ]'], [27516795, 'chrome.dll!sqlite3VdbeExec+0x318b [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbe.c:3838 ]'], [27336190, 'chrome.dll!sqlite3Step+0x11e [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbeapi.c:247 ]'], [27336432, 'chrome.dll!sqlite3_step+0x10 [ c:\\g\\trunk\\src\\third_party\\sqlite\\vdbeapi.c:303 ]'], [27314864, 'chrome.dll!sqlite3_exec+0xb0 [ c:\\g\\trunk\\src\\third_party\\sqlite\\legacy.c:76 ]'], [21366866, 'chrome.dll!history::InMemoryDatabase::InitFromDisk+0x162 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\in_memory_database.cc:82 ]'], [20617111, 'chrome.dll!history::HistoryBackend::InitImpl+0x387 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:528 ]'], [20622856, 'chrome.dll!history::HistoryBackend::Init+0x8 [ c:\\g\\trunk\\src\\chrome\\browser\\history\\history_backend.cc:238 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19486017, 'chrome.dll!base::MessagePumpDefault::Run+0x111 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:50 ]']], 'thread': 2688, 'syscall': 183, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtReadFile', 'done': 257.96155700000003, 'ms': 257.69392499999998, 'syscallargs': [272, 0, 0], 'cpu': 2147742720}, -{'thread': 2688, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 2147742720, 'ms': 284.95968099999999, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [20855572, 'chrome.dll!ProfileImpl::~ProfileImpl+0x1b4 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:621 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 286.96077300000002, 'ms': 285.515897, 'syscallargs': [6685238, 1025, 13825696], 'cpu': 2147742720}, -{'stacktrace': [[19407956, 'chrome.dll!MessageLoop::PostTask+0x14 [ c:\\g\\trunk\\src\\base\\message_loop.cc:231 ]'], [27028623, 'chrome.dll!PrefService::SavePersistentPrefs+0x12f [ c:\\g\\trunk\\src\\chrome\\common\\pref_service.cc:204 ]'], [20855685, 'chrome.dll!ProfileImpl::~ProfileImpl+0x225 [ c:\\g\\trunk\\src\\chrome\\browser\\profile.cc:633 ]'], [20856251, "chrome.dll!ProfileImpl::`scalar deleting destructor'+0xb"], [20599735, 'chrome.dll!ProfileManager::~ProfileManager+0x67 [ c:\\g\\trunk\\src\\chrome\\browser\\profile_manager.cc:47 ]'], [20600411, "chrome.dll!ProfileManager::`scalar deleting destructor'+0xb"], [20507748, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x64 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:154 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 4571, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'user32.dll!NtUserPostMessage', 'done': 287.78713499999998, 'ms': 287.20828999999998, 'syscallargs': [8585726, 1025, 13802976], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 287.99358599999999, 'ms': 287.77847500000001, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20507877, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0xe5 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:172 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.546019, 'ms': 287.99023299999999, 'syscallargs': [196, 0, 0], 'cpu': 3124053392}, -{'stacktrace': [[2118227449, 'USER32.dll!RealMsgWaitForMultipleObjectsEx+0xd9'], [19467175, 'chrome.dll!base::MessagePumpForUI::WaitForWork+0x27 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:408 ]'], [19470141, 'chrome.dll!base::MessagePumpForUI::DoRunLoop+0xbd [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:393 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 2736, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 300.57563199999998, 'ms': 288.06845600000003, 'syscallargs': [1, 15858672, 1], 'cpu': 3124053392}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [23800337, "chrome.dll!base::Thread::`scalar deleting destructor'+0x11"], [20807416, 'chrome.dll!SafeBrowsingService::OnIOShutdown+0xd8 [ c:\\g\\trunk\\src\\chrome\\browser\\safe_browsing\\safe_browsing_service.cc:124 ]'], [19405904, 'chrome.dll!MessageLoop::RunTask+0x80 [ c:\\g\\trunk\\src\\base\\message_loop.cc:309 ]'], [19408986, 'chrome.dll!MessageLoop::DoWork+0x1ea [ c:\\g\\trunk\\src\\base\\message_loop.cc:416 ]'], [19470254, 'chrome.dll!base::MessagePumpForIO::DoRunLoop+0x5e [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:533 ]'], [19464514, 'chrome.dll!base::MessagePumpWin::RunWithDispatcher+0x42 [ c:\\g\\trunk\\src\\base\\message_pump_win.cc:134 ]'], [19397518, 'chrome.dll!base::MessagePumpWin::Run+0xe [ c:\\g\\trunk\\src\\base\\message_pump_win.h:124 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 708, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.18396200000001, 'ms': 299.48918099999997, 'syscallargs': [288, 0, 0], 'cpu': 2147742720}, -{'thread': 2136, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 299.871352, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19495803, 'chrome.dll!base::WaitableEvent::Wait+0x1b [ c:\\g\\trunk\\src\\base\\waitable_event_win.cc:42 ]'], [19485939, 'chrome.dll!base::MessagePumpDefault::Run+0xc3 [ c:\\g\\trunk\\src\\base\\message_pump_default.cc:43 ]'], [19407831, 'chrome.dll!MessageLoop::RunInternal+0xb7 [ c:\\g\\trunk\\src\\base\\message_loop.cc:197 ]'], [19408240, 'chrome.dll!MessageLoop::RunHandler+0xa0 [ c:\\g\\trunk\\src\\base\\message_loop.cc:181 ]'], [19410461, 'chrome.dll!MessageLoop::Run+0x3d [ c:\\g\\trunk\\src\\base\\message_loop.cc:155 ]'], [23799658, 'chrome.dll!base::Thread::ThreadMain+0x8a [ c:\\g\\trunk\\src\\base\\thread.cc:159 ]'], [19417293, "chrome.dll!`anonymous namespace'::ThreadFunc+0xd [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:27 ]"], [2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 1884, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 301.27013299999999, 'ms': 299.88085100000001, 'syscallargs': [284, 0, 0], 'cpu': 2147742720}, -{'thread': 708, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 300.33398099999999, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20507946, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x12a [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:183 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 300.95026000000001, 'ms': 300.57758699999999, 'syscallargs': [156, 0, 0], 'cpu': 2147742720}, -{'thread': 2736, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 300.73039999999997, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [19417840, 'chrome.dll!PlatformThread::Join+0x60 [ c:\\g\\trunk\\src\\base\\platform_thread_win.cc:94 ]'], [23799942, 'chrome.dll!base::Thread::Stop+0xc6 [ c:\\g\\trunk\\src\\base\\thread.cc:112 ]'], [20503505, "chrome.dll!`anonymous namespace'::BrowserProcessSubThread::`scalar deleting destructor'+0x11"], [20508363, 'chrome.dll!BrowserProcessImpl::~BrowserProcessImpl+0x2cb [ c:\\g\\trunk\\src\\chrome\\browser\\browser_process_impl.cc:203 ]'], [20508459, "chrome.dll!BrowserProcessImpl::`scalar deleting destructor'+0xb"], [20562398, 'chrome.dll!browser_shutdown::Shutdown+0x12e [ c:\\g\\trunk\\src\\chrome\\browser\\browser_shutdown.cc:119 ]'], [20405156, 'chrome.dll!BrowserMain+0x1024 [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 301.49865399999999, 'ms': 301.267899, 'syscallargs': [280, 0, 0], 'cpu': 2147742720}, -{'thread': 1884, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 301.33801899999997, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088804469, 'kernel32.dll!WaitForMultipleObjects+0x18'], [20822595, 'chrome.dll!chrome_browser_net::DnsMaster::ShutdownSlaves+0x243 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_master.cc:358 ]'], [20522695, 'chrome.dll!chrome_browser_net::ShutdownDnsPrefetch+0x77 [ c:\\g\\trunk\\src\\chrome\\browser\\net\\dns_global.cc:372 ]'], [20405195, 'chrome.dll!BrowserMain+0x104b [ c:\\g\\trunk\\src\\chrome\\browser\\browser_main.cc:604 ]'], [19354554, 'chrome.dll!ChromeMain+0x83a [ c:\\g\\trunk\\src\\chrome\\app\\chrome_dll_main.cc:224 ]'], [4205604, 'chrome.exe!wWinMain+0x304 [ c:\\g\\trunk\\src\\chrome\\app\\chrome_exe_main.cc:103 ]'], [4482934, 'chrome.exe!__tmainCRTStartup+0x176 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0.c:324 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 302.38675599999999, 'ms': 302.15851500000002, 'syscallargs': [1, 1242668, 0], 'cpu': 3124053392}, -{'thread': 2812, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 2147742720, 'ms': 302.17639400000002, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088810115, 'kernel32.dll!BaseThreadStart+0x37']], 'thread': 3500, 'syscall': 270, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!NtWaitForMultipleObjects', 'waiting': 1, 'done': 324.76809200000002, 'ms': 302.48956199999998, 'syscallargs': [8, 32505136, 1], 'cpu': 3124053392}, -{'thread': 2428, 'eventtype': 'EVENT_TYPE_THREADEXIT', 'cpu': 3124053392, 'ms': 304.13334700000001, 'stacktrace': [[2088810121, 'kernel32.dll!BaseThreadStart+0x3d']]}, -{'stacktrace': [[2088772914, 'kernel32.dll!WaitForSingleObject+0x12'], [4226553, 'chrome.exe!sandbox::TargetProcess::~TargetProcess+0x19 [ c:\\g\\trunk\\src\\sandbox\\src\\target_process.cc:103 ]'], [4228125, 'chrome.exe!sandbox::PolicyBase::OnJobEmpty+0xdd [ c:\\g\\trunk\\src\\sandbox\\src\\sandbox_policy_base.cc:171 ]'], [4215782, 'chrome.exe!sandbox::BrokerServicesBase::FreeResources+0xc6 [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:124 ]'], [4216698, 'chrome.exe!sandbox::BrokerServicesBase::~BrokerServicesBase+0xfa [ c:\\g\\trunk\\src\\sandbox\\src\\broker_services.cc:101 ]'], [4212403, 'chrome.exe!sandbox::SingletonBase::OnExit+0x13 [ c:\\g\\trunk\\src\\sandbox\\src\\win_utils.h:58 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 271, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwWaitForSingleObject', 'waiting': 1, 'done': 324.702721, 'ms': 304.33728300000001, 'syscallargs': [424, 0, 1244444], 'cpu': 2147742720}, -{'stacktrace': [[2088881646, 'kernel32.dll!ExitProcess+0x14'], [4484030, 'chrome.exe!__crtExitProcess+0x14 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:683 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']], 'thread': 3956, 'syscall': 257, 'eventtype': 'EVENT_TYPE_SYSCALL', 'syscallname': 'ntdll.dll!ZwTerminateProcess', 'done': 325.70620000000002, 'ms': 325.44387599999999, 'syscallargs': [0, 0, 241550694], 'cpu': 2147742720}, -{'thread': 3956, 'eventtype': 'EVENT_TYPE_PROCESSEXIT', 'cpu': 3124053392, 'ms': 325.70871399999999, 'stacktrace': [[2088881646, 'kernel32.dll!ExitProcess+0x14'], [4484030, 'chrome.exe!__crtExitProcess+0x14 [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:683 ]'], [4484605, 'chrome.exe!exit+0xd [ f:\\sp\\vctools\\crt_bld\\self_x86\\crt\\src\\crt0dat.c:398 ]'], [2088857559, 'kernel32.dll!BaseProcessStart+0x23']]}, -]) diff --git a/chromium/tools/traceline/svgui/traceline.css b/chromium/tools/traceline/svgui/traceline.css deleted file mode 100644 index 98bf4450a77..00000000000 --- a/chromium/tools/traceline/svgui/traceline.css +++ /dev/null @@ -1,73 +0,0 @@ -@namespace url(http://www.w3.org/1999/xhtml); -@namespace svg url(http://www.w3.org/2000/svg); - -body { - /* Trim down the default top margin of 8px, so we have a bit more space. */ - margin-top: 4px; -} - -div.threadnamediv { - height: 16px; -} -div.threadnamesdiv { - margin-right: 2px; - position: absolute; - font-family: monospace; - z-index: -1; -} - -/* The fakescrolldiv will have the scroll bar, the amount it scrolls is - controlled by the size of fattydiv within it. */ -div.fakescrolldiv { - /* This needs to be at least 16px, the height of the scrollbar, to have the - scrollbar renderer in firefox */ - /* Making the height 16px in webkit causes the computed width to be 16px - shorter than what we specify. 17px is enough to cause it to be correct */ - height: 17px; - width: 1008px; - overflow: auto; -} - -div.fattydiv { - /* the div needs to have a height for the scrollbar to render in firefox */ - height: 1px; -} - -div.infoareadiv { - margin-top: 4px; - padding: 4px; - border: 1px solid gray; - height: 350px; - overflow: auto; - font-family: monospace; - white-space: pre; -} - -svg|rect.thread { - /* fill: #f4f4f6; */ - fill: #efeff2; - opacity: 0.7; -} - -svg|rect.event { - fill: #f6a120; -} - -svg|rect.eventwaiting { - fill: #62ccf3; -} - -svg|rect.event:hover, svg|rect.eventwaiting:hover { - fill: #d92129; -} - -svg|line.eventline { - stroke: #bad432; - stroke-width: 2px; - stroke-opacity: 0.7; -} - -svg|line.eventline:hover { - stroke: #d92129; - stroke-opacity: 1; -} diff --git a/chromium/tools/traceline/svgui/traceline.js b/chromium/tools/traceline/svgui/traceline.js deleted file mode 100644 index 33cc2dfa388..00000000000 --- a/chromium/tools/traceline/svgui/traceline.js +++ /dev/null @@ -1,693 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO -// - spacial partitioning of the data so that we don't have to scan the -// entire scene every time we render. -// - properly clip the SVG elements when they render, right now we are just -// letting them go negative or off the screen. This might give us a little -// bit better performance? -// - make the lines for thread creation work again. Figure out a better UI -// than these lines, because they can be a bit distracting. -// - Implement filters, so that you can filter on specific event types, etc. -// - Make the callstack box collapsable or scrollable or something, it takes -// up a lot of screen realestate now. -// - Figure out better ways to preserve screen realestate. -// - Make the thread bar heights configurable, figure out a better way to -// handle overlapping events (the pushdown code). -// - "Sticky" info, so you can click on something, and it will stay. Now -// if you need to scroll the page you usually lose the info because you -// will mouse over something else on your way to scrolling. -// - Help / legend -// - Loading indicator / debug console. -// - OH MAN BETTER COLORS PLEASE -// -// Dean McNamee - -// Man... namespaces are such a pain. -var svgNS = 'http://www.w3.org/2000/svg'; -var xhtmlNS = 'http://www.w3.org/1999/xhtml'; - -function toHex(num) { - var str = ""; - var table = "0123456789abcdef"; - for (var i = 0; i < 8; ++i) { - str = table.charAt(num & 0xf) + str; - num >>= 4; - } - return str; -} - -// a TLThread represents information about a thread in the traceline data. -// A thread has a list of all events that happened on that thread, the start -// and end time of the thread, the thread id, and name, etc. -function TLThread(id, startms, endms) { - this.id = id; - // Default the name to the thread id, but if the application uses - // thread naming, we might see a THREADNAME event later and update. - this.name = "thread_" + id; - this.startms = startms; - this.endms = endms; - this.events = [ ]; -}; - -TLThread.prototype.duration_ms = -function() { - return this.endms - this.startms; -}; - -TLThread.prototype.AddEvent = -function(e) { - this.events.push(e); -}; - -TLThread.prototype.toString = -function() { - var res = "TLThread -- id: " + this.id + " name: " + this.name + - " startms: " + this.startms + " endms: " + this.endms + - " parent: " + this.parent; - return res; -}; - -// A TLEvent represents a single logged event that happened on a thread. -function TLEvent(e) { - this.eventtype = e['eventtype']; - this.thread = toHex(e['thread']); - this.cpu = toHex(e['cpu']); - this.ms = e['ms']; - this.done = e['done']; - this.e = e; -} - -function HTMLEscape(str) { - return str.replace(/&/g, '&').replace(//g, '>'); -} - -TLEvent.prototype.toString = -function() { - var res = "ms: " + this.ms + " " + - "event: " + this.eventtype + " " + - "thread: " + this.thread + " " + - "cpu: " + this.cpu + "
"; - if ('ldrinfo' in this.e) { - res += "ldrinfo: " + this.e['ldrinfo'] + "
"; - } - if ('done' in this.e && this.e['done'] > 0) { - res += "done: " + this.e['done'] + " "; - res += "duration: " + (this.e['done'] - this.ms) + "
"; - } - if ('syscall' in this.e) { - res += "syscall: " + this.e['syscall']; - if ('syscallname' in this.e) { - res += " syscallname: " + this.e['syscallname']; - } - if ('retval' in this.e) { - res += " retval: " + this.e['retval']; - } - res += "
" - } - if ('func_addr' in this.e) { - res += "func_addr: " + toHex(this.e['func_addr']); - if ('func_addr_name' in this.e) { - res += " func_addr_name: " + HTMLEscape(this.e['func_addr_name']); - } - res += "
" - } - if ('stacktrace' in this.e) { - var stack = this.e['stacktrace']; - res += "stacktrace:
"; - for (var i = 0; i < stack.length; ++i) { - res += "0x" + toHex(stack[i][0]) + " - " + - HTMLEscape(stack[i][1]) + "
"; - } - } - - return res; -} - -// The trace logger dumps all log events to a simple JSON array. We delay -// and background load the JSON, since it can be large. When the JSON is -// loaded, parseEvents(...) is called and passed the JSON data. To make -// things easier, we do a few passes on the data to group them together by -// thread, gather together some useful pieces of data in a single place, -// and form more of a structure out of the data. We also build links -// between related events, for example a thread creating a new thread, and -// the new thread starting to run. This structure is fairly close to what -// we want to represent in the interface. - -// Delay load the JSON data. We want to display the order in the order it was -// passed to us. Since we have no way of correlating the json callback to -// which script element it was called on, we load them one at a time. - -function JSONLoader(json_urls) { - this.urls_to_load = json_urls; - this.script_element = null; -} - -JSONLoader.prototype.IsFinishedLoading = -function() { return this.urls_to_load.length == 0; }; - -// Start loading of the next JSON URL. -JSONLoader.prototype.LoadNext = -function() { - var sc = document.createElementNS( - 'http://www.w3.org/1999/xhtml', 'script'); - this.script_element = sc; - - sc.setAttribute("src", this.urls_to_load[0]); - document.getElementsByTagNameNS(xhtmlNS, 'body')[0].appendChild(sc); -}; - -// Callback counterpart to load_next, should be called when the script element -// is finished loading. Returns the URL that was just loaded. -JSONLoader.prototype.DoneLoading = -function() { - // Remove the script element from the DOM. - this.script_element.parentNode.removeChild(this.script_element); - this.script_element = null; - // Return the URL that had just finished loading. - return this.urls_to_load.shift(); -}; - -var loader = null; - -function loadJSON(json_urls) { - loader = new JSONLoader(json_urls); - if (!loader.IsFinishedLoading()) - loader.LoadNext(); -} - -var traceline = new Traceline(); - -// Called from the JSON with the log event array. -function parseEvents(json) { - loader.DoneLoading(); - - var done = loader.IsFinishedLoading(); - if (!done) - loader.LoadNext(); - - traceline.ProcessJSON(json); - - if (done) - traceline.Render(); -} - -// The Traceline class represents our entire state, all of the threads from -// all sets of data, all of the events, DOM elements, etc. -function Traceline() { - // The array of threads that existed in the program. Hopefully in order - // they were created. This includes all threads from all sets of data. - this.threads = [ ]; - - // Keep a mapping of where in the list of threads a set starts... - this.thread_set_indexes = [ ]; - - // Map a thread id to the index in the threads array. A thread ID is the - // unique ID from the OS, along with our set id of which data file we were. - this.threads_by_id = { }; - - // The last event time of all of our events. - this.endms = 0; - - // Constants for SVG rendering... - this.kThreadHeightPx = 16; - this.kTimelineWidthPx = 1008; -} - -// Called to add another set of data into the traceline. -Traceline.prototype.ProcessJSON = -function(json_data) { - // Keep track of which threads belong to which sets of data... - var set_id = this.thread_set_indexes.length; - this.thread_set_indexes.push(this.threads.length); - - // TODO make this less hacky. Used to connect related events, like creating - // a thread and then having that thread run (two separate events which are - // related but come in at different times, etc). - var tiez = { }; - - // Run over the data, building TLThread's and TLEvents, and doing some - // processing to put things in an easier to display form... - for (var i = 0, il = json_data.length; i < il; ++i) { - var e = new TLEvent(json_data[i]); - - // Create a unique identifier for a thread by using the id of this data - // set, so that they are isolated from other sets of data with the same - // thread id, etc. TODO don't overwrite the original... - e.thread = set_id + '_' + e.thread; - - // If this is the first event ever seen on this thread, create a new - // thread object and add it to our lists of threads. - if (!(e.thread in this.threads_by_id)) { - var end_ms = e.done ? e.done : e.ms; - var new_thread = new TLThread(e.thread, e.ms, end_ms); - this.threads_by_id[new_thread.id] = this.threads.length; - this.threads.push(new_thread); - } - - var thread = this.threads[this.threads_by_id[e.thread]]; - thread.AddEvent(e); - - // Keep trace of the time of the last event seen. - var end_ms = e.done ? e.done : e.ms; - if (end_ms > this.endms) this.endms = end_ms; - if (end_ms > thread.endms) thread.endms = end_ms; - - switch(e.eventtype) { - case 'EVENT_TYPE_THREADNAME': - thread.name = e.e['threadname']; - break; - case 'EVENT_TYPE_CREATETHREAD': - tiez[e.e['eventid']] = e; - break; - case 'EVENT_TYPE_THREADBEGIN': - var pei = e.e['parenteventid']; - if (pei in tiez) { - e.parentevent = tiez[pei]; - tiez[pei].childevent = e; - } - break; - } - } -}; - -Traceline.prototype.Render = -function() { this.RenderSVG(); }; - -Traceline.prototype.RenderText = -function() { - var z = document.getElementsByTagNameNS(xhtmlNS, 'body')[0]; - for (var i = 0, il = this.threads.length; i < il; ++i) { - var p = document.createElementNS( - 'http://www.w3.org/1999/xhtml', 'p'); - p.innerHTML = this.threads[i].toString(); - z.appendChild(p); - } -}; - -// Oh man, so here we go. For two reasons, I implement my own scrolling -// system. First off, is that in order to scale, we want to have as little -// on the DOM as possible. This means not having off-screen elements in the -// DOM, as this slows down everything. This comes at a cost of more expensive -// scrolling performance since you have to re-render the scene. The second -// reason is a bug I stumbled into: -// https://bugs.webkit.org/show_bug.cgi?id=21968 -// This means that scrolling an SVG element doesn't really work properly -// anyway. So what the code does is this. We have our layout that looks like: -// [ thread names ] [ svg timeline ] -// [ scroll bar ] -// We make a fake scrollbar, which doesn't actually have the SVG inside of it, -// we want for when this scrolls, with some debouncing, and then when it has -// scrolled we rerender the scene. This means that the SVG element is never -// scrolled, and coordinates are always at 0. We keep the scene in millisecond -// units which also helps for zooming. We do our own hit testing and decide -// what needs to be renderer, convert from milliseconds to SVG pixels, and then -// draw the update into the static SVG element... Y coordinates are still -// always in pixels (since we aren't paging along the Y axis), but this might -// be something to fix up later. - -function SVGSceneLine(msg, klass, x1, y1, x2, y2) { - this.type = SVGSceneLine; - this.msg = msg; - this.klass = klass; - - this.x1 = x1; - this.y1 = y1; - this.x2 = x2; - this.y2 = y2; - - this.hittest = function(startms, dur) { - return true; - }; -} - -function SVGSceneRect(msg, klass, x, y, width, height) { - this.type = SVGSceneRect; - this.msg = msg; - this.klass = klass; - - this.x = x; - this.y = y; - this.width = width; - this.height = height; - - this.hittest = function(startms, dur) { - return this.x <= (startms + dur) && - (this.x + this.width) >= startms; - }; -} - -Traceline.prototype.RenderSVG = -function() { - var threadnames = this.RenderSVGCreateThreadNames(); - var scene = this.RenderSVGCreateScene(); - - var curzoom = 8; - - // The height is static after we've created the scene - var dom = this.RenderSVGCreateDOM(threadnames, scene.height); - - dom.zoom(curzoom); - - dom.attach(); - - var draw = (function(obj) { - return function(scroll, total) { - var startms = (scroll / total) * obj.endms; - - var start = (new Date).getTime(); - var count = obj.RenderSVGRenderScene(dom, scene, startms, curzoom); - var total = (new Date).getTime() - start; - - dom.infoareadiv.innerHTML = - 'Scene render of ' + count + ' nodes took: ' + total + ' ms'; - }; - })(this, dom, scene); - - // Paint the initial paint with no scroll - draw(0, 1); - - // Hook us up to repaint on scrolls. - dom.redraw = draw; -}; - - -// Create all of the DOM elements for the SVG scene. -Traceline.prototype.RenderSVGCreateDOM = -function(threadnames, svgheight) { - - // Total div holds the container and the info area. - var totaldiv = document.createElementNS(xhtmlNS, 'div'); - - // Container holds the thread names, SVG element, and fake scroll bar. - var container = document.createElementNS(xhtmlNS, 'div'); - container.className = 'container'; - - // This is the div that holds the thread names along the left side, this is - // done in HTML for easier/better text support than SVG. - var threadnamesdiv = document.createElementNS(xhtmlNS, 'div'); - threadnamesdiv.className = 'threadnamesdiv'; - - // Add all of the names into the div, these are static and don't update. - for (var i = 0, il = threadnames.length; i < il; ++i) { - var div = document.createElementNS(xhtmlNS, 'div'); - div.className = 'threadnamediv'; - div.appendChild(document.createTextNode(threadnames[i])); - threadnamesdiv.appendChild(div); - } - - // SVG div goes along the right side, it holds the SVG element and our fake - // scroll bar. - var svgdiv = document.createElementNS(xhtmlNS, 'div'); - svgdiv.className = 'svgdiv'; - - // The SVG element, static width, and we will update the height after we've - // walked through how many threads we have and know the size. - var svg = document.createElementNS(svgNS, 'svg'); - svg.setAttributeNS(null, 'height', svgheight); - svg.setAttributeNS(null, 'width', this.kTimelineWidthPx); - - // The fake scroll div is an outer div with a fixed size with a scroll. - var fakescrolldiv = document.createElementNS(xhtmlNS, 'div'); - fakescrolldiv.className = 'fakescrolldiv'; - - // Fatty is inside the fake scroll div to give us the size we want to scroll. - var fattydiv = document.createElementNS(xhtmlNS, 'div'); - fattydiv.className = 'fattydiv'; - fakescrolldiv.appendChild(fattydiv); - - var infoareadiv = document.createElementNS(xhtmlNS, 'div'); - infoareadiv.className = 'infoareadiv'; - infoareadiv.innerHTML = 'Hover an event...'; - - // Set the SVG mouseover handler to write the data to the infoarea. - svg.addEventListener('mouseover', (function(infoarea) { - return function(e) { - if ('msg' in e.target && e.target.msg) { - infoarea.innerHTML = e.target.msg; - } - e.stopPropagation(); // not really needed, but might as well. - }; - })(infoareadiv), true); - - - svgdiv.appendChild(svg); - svgdiv.appendChild(fakescrolldiv); - - container.appendChild(threadnamesdiv); - container.appendChild(svgdiv); - - totaldiv.appendChild(container); - totaldiv.appendChild(infoareadiv); - - var widthms = Math.floor(this.endms + 2); - // Make member variables out of the things we want to 'export', things that - // will need to be updated each time we redraw the scene. - var obj = { - // The root of our piece of the DOM. - 'totaldiv': totaldiv, - // We will want to listen for scrolling on the fakescrolldiv - 'fakescrolldiv': fakescrolldiv, - // The SVG element will of course need updating. - 'svg': svg, - // The area we update with the info on mouseovers. - 'infoareadiv': infoareadiv, - // Called when we detected new scroll a should redraw - 'redraw': function() { }, - 'attached': false, - 'attach': function() { - document.getElementsByTagNameNS(xhtmlNS, 'body')[0].appendChild( - this.totaldiv); - this.attached = true; - }, - // The fatty div will have its width adjusted based on the zoom level and - // the duration of the graph, to get the scrolling correct for the size. - 'zoom': function(curzoom) { - var width = widthms * curzoom; - fattydiv.style.width = width + 'px'; - }, - 'detach': function() { - this.totaldiv.parentNode.removeChild(this.totaldiv); - this.attached = false; - }, - }; - - // Watch when we get scroll events on the fake scrollbar and debounce. We - // need to give it a pointer to use in the closer to call this.redraw(); - fakescrolldiv.addEventListener('scroll', (function(theobj) { - var seqnum = 0; - return function(e) { - seqnum = (seqnum + 1) & 0xffff; - window.setTimeout((function(myseqnum) { - return function() { - if (seqnum == myseqnum) { - theobj.redraw(e.target.scrollLeft, e.target.scrollWidth); - } - }; - })(seqnum), 100); - }; - })(obj), false); - - return obj; -}; - -Traceline.prototype.RenderSVGCreateThreadNames = -function() { - // This names is the list to show along the left hand size. - var threadnames = [ ]; - - for (var i = 0, il = this.threads.length; i < il; ++i) { - var thread = this.threads[i]; - - // TODO make this not so stupid... - if (i != 0) { - for (var j = 0; j < this.thread_set_indexes.length; j++) { - if (i == this.thread_set_indexes[j]) { - threadnames.push('------'); - break; - } - } - } - - threadnames.push(thread.name); - } - - return threadnames; -}; - -Traceline.prototype.RenderSVGCreateScene = -function() { - // This scene is just a list of SVGSceneRect and SVGSceneLine, in no great - // order. In the future they should be structured to make range checking - // faster. - var scene = [ ]; - - // Remember, for now, Y (height) coordinates are still in pixels, since we - // don't zoom or scroll in this direction. X coordinates are milliseconds. - - var lasty = 0; - for (var i = 0, il = this.threads.length; i < il; ++i) { - var thread = this.threads[i]; - - // TODO make this not so stupid... - if (i != 0) { - for (var j = 0; j < this.thread_set_indexes.length; j++) { - if (i == this.thread_set_indexes[j]) { - lasty += this.kThreadHeightPx; - break; - } - } - } - - // For this thread, create the background thread (blue band); - scene.push(new SVGSceneRect(null, - 'thread', - thread.startms, - 1 + lasty, - thread.duration_ms(), - this.kThreadHeightPx - 2)); - - // Now create all of the events... - var pushdown = [ 0, 0, 0, 0 ]; - for (var j = 0, jl = thread.events.length; j < jl; ++j) { - var e = thread.events[j]; - - var y = 2 + lasty; - - // TODO this is a hack just so that we know the correct why position - // so we can create the threadline... - if (e.childevent) { - e.marky = y; - } - - // Handle events that we want to represent as lines and not event blocks, - // right now this is only thread creation. We map an event back to its - // "parent" event, and now lets add a line to represent that. - if (e.parentevent) { - var eparent = e.parentevent; - var msg = eparent.toString() + '
' + e.toString(); - scene.push( - new SVGSceneLine(msg, 'eventline', - eparent.ms, eparent.marky + 5, e.ms, lasty + 5)); - } - - // We get negative done values (well, really, it was 0 and then made - // relative to start time) when a syscall never returned... - var dur = 0; - if ('done' in e.e && e.e['done'] > 0) { - dur = e.e['done'] - e.ms; - } - - // TODO skip short events for now, but eventually we should figure out - // a way to control this from the UI, etc. - if (dur < 0.2) - continue; - - var width = dur; - - // Try to find an available horizontal slot for our event. - for (var z = 0; z < pushdown.length; ++z) { - var found = false; - var slot = z; - if (pushdown[z] < e.ms) { - found = true; - } - if (!found) { - if (z != pushdown.length - 1) - continue; - slot = Math.floor(Math.random() * pushdown.length); - alert('blah'); - } - - pushdown[slot] = e.ms + dur; - y += slot * 4; - break; - } - - - // Create the event - klass = e.e.waiting ? 'eventwaiting' : 'event'; - scene.push( - new SVGSceneRect(e.toString(), klass, e.ms, y, width, 3)); - - // If there is a "parentevent", we want to make a line there. - // TODO - } - - lasty += this.kThreadHeightPx; - } - - return { - 'scene': scene, - 'width': this.endms + 2, - 'height': lasty, - }; -}; - -Traceline.prototype.RenderSVGRenderScene = -function(dom, scene, startms, curzoom) { - var stuff = scene.scene; - var svg = dom.svg; - - var count = 0; - - // Remove everything from the DOM. - while (svg.firstChild) - svg.removeChild(svg.firstChild); - - // Don't actually need this, but you can't transform on an svg element, - // so it's nice to have a around for transforms... - var svgg = document.createElementNS(svgNS, 'g'); - - var dur = this.kTimelineWidthPx / curzoom; - - function min(a, b) { - return a < b ? a : b; - } - - function max(a, b) { - return a > b ? a : b; - } - - function timeToPixel(x) { - // TODO(deanm): This clip is a bit shady. - var x = min(max(Math.floor(x*curzoom), -100), 2000); - return (x == 0 ? 1 : x); - } - - for (var i = 0, il = stuff.length; i < il; ++i) { - var thing = stuff[i]; - if (!thing.hittest(startms, startms+dur)) - continue; - - - if (thing.type == SVGSceneRect) { - var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); - rect.setAttributeNS(null, 'class', thing.klass) - rect.setAttributeNS(null, 'x', timeToPixel(thing.x - startms)); - rect.setAttributeNS(null, 'y', thing.y); - rect.setAttributeNS(null, 'width', timeToPixel(thing.width)); - rect.setAttributeNS(null, 'height', thing.height); - rect.msg = thing.msg; - svgg.appendChild(rect); - } else if (thing.type == SVGSceneLine) { - var line = document.createElementNS('http://www.w3.org/2000/svg', 'line'); - line.setAttributeNS(null, 'class', thing.klass) - line.setAttributeNS(null, 'x1', timeToPixel(thing.x1 - startms)); - line.setAttributeNS(null, 'y1', thing.y1); - line.setAttributeNS(null, 'x2', timeToPixel(thing.x2 - startms)); - line.setAttributeNS(null, 'y2', thing.y2); - line.msg = thing.msg; - svgg.appendChild(line); - } - - ++count; - } - - // Append the 'g' element on after we've build it. - svg.appendChild(svgg); - - return count; -}; diff --git a/chromium/tools/traceline/svgui/traceline.xml b/chromium/tools/traceline/svgui/traceline.xml deleted file mode 100644 index 375744d069b..00000000000 --- a/chromium/tools/traceline/svgui/traceline.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - Traceline SVG - - - - - - - - diff --git a/chromium/tools/traceline/traceline/Makefile b/chromium/tools/traceline/traceline/Makefile deleted file mode 100644 index d5ac5b626a2..00000000000 --- a/chromium/tools/traceline/traceline/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -all: - cl \ - sidestep/ia32_modrm_map.cc \ - sidestep/ia32_opcode_map.cc \ - sidestep/mini_disassembler.cc \ - main.cc \ - /Fetraceline.exe \ - /D_WIN32_WINNT=0x0500 \ - /D_HAS_EXCEPTIONS=0 \ - "/I." \ - /Zi \ - /link \ - kernel32.lib user32.lib dbghelp.lib powrprof.lib - -tests: - cl \ - assembler_unittest.cc \ - /Fassembler_unittest.exe \ - /D_WIN32_WINNT=0x0500 \ - /D_HAS_EXCEPTIONS=0 \ - /Zi \ - /link \ - kernel32.lib user32.lib dbghelp.lib powrprof.lib - -stubs : stubs.asm - nasm -o stubs stubs.asm - ndisasm -u stubs - -clean: - rm -f *.obj {cpuinfo,traceline,assembler_unittest,vc80}.{exe,ilk,pdb} stubs diff --git a/chromium/tools/traceline/traceline/README b/chromium/tools/traceline/traceline/README deleted file mode 100644 index 97ceec8b664..00000000000 --- a/chromium/tools/traceline/traceline/README +++ /dev/null @@ -1,21 +0,0 @@ -Traceline is a Windows utility to intercept, time, and log system calls. This -is achieved by injecting code into a target process, along with dynamically -generated assembly hook stubs. One of the major goals was to skew performance -timings as little as possible. This lead to a design in which the log buffer -(which is called the playground) is kept within the process, and the logger -routines use atomic instructions to log their events to this buffer. At the -end of the processes lifetime, this buffer is pulled out of the process and -used to generated JSON output. In addition to hooking system call activity, -other hooks of interest have been written, including heap allocation functions. -Symbols are supported with a command line flag. This works by capturing the -process shutdown, and doing an intrusive symbol attach with dbghelp.dll - -NOTES: - - You should copy dbghelp.dll from a windbg installation into this directory. - The version shipped with Windows is old, and symbol support won't work. - - You will need a bit of cygwin if you want to use the Makefile. Otherwise - it is pretty clear how to build the files manually. - - The output JSON data will be printed out stdout. It is likely that you - will want to pipe the output of this program into a file. - -Dean McNamee diff --git a/chromium/tools/traceline/traceline/assembler.h b/chromium/tools/traceline/traceline/assembler.h deleted file mode 100644 index 6ae69587020..00000000000 --- a/chromium/tools/traceline/traceline/assembler.h +++ /dev/null @@ -1,576 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Copyright (c) 1994-2006 Sun Microsystems Inc. -// All Rights Reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// - Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// - Redistribution in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// - Neither the name of Sun Microsystems or the names of contributors may -// be used to endorse or promote products derived from this software without -// specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// The original source code covered by the above license above has been -// modified significantly by Google Inc. -// Copyright 2006-2008 the V8 project authors. All rights reserved. - -// This implements a C++ assembler for dynamically generating machine code. -// It is heavily based on the v8 assembler, which has a long history of its -// own. Relocation information has been removed, and in general things were -// made a bit simpler (and slower). Everything is implemented inline. - -#ifndef TRACELINE_ASSEMBLER_H_ -#define TRACELINE_ASSEMBLER_H_ - -#include -#include -#include - -#include "logging.h" - -#define ASSERT(x) CHECK(x) - -enum Register { - EAX = 0, - ECX = 1, - EDX = 2, - EBX = 3, - ESP = 4, - EBP = 5, - ESI = 6, - EDI = 7 -}; - -enum Condition { - overflow = 0, - no_overflow = 1, - below = 2, - above_equal = 3, - equal = 4, - not_equal = 5, - below_equal = 6, - above = 7, - sign = 8, - not_sign = 9, - parity_even = 10, - parity_odd = 11, - less = 12, - greater_equal = 13, - less_equal = 14, - greater = 15, - - // aliases - zero = equal, - not_zero = not_equal, - negative = sign, - positive = not_sign -}; - -// Labels are used for branching, and marks an offset in the CodeBuffer. -// A label can be in 3 states: -// - Unused, the label has never be used in an instruction. -// - Linked, the label has been referenced (by a jump, for example), but the -// target is not yet known, because the label is unbound. -// - Bound, the label has been bound so the offset is known. -class Label { - public: - Label() { Unuse(); } - ~Label() { ASSERT(!is_linked()); } - - void Unuse() { - num_ = 0; - } - - bool is_unused() const { return num_ == 0; } - bool is_bound() const { return num_ == -1; } - bool is_linked() const { return num_ > 0; } - - int binding_pos() const { - ASSERT(is_bound()); - return table_[0]; - } - - int num_links() const { - ASSERT(!is_bound()); - return num_; // Will return 0 if unused. - } - - int link_pos(int i) const { - ASSERT(is_linked()); - ASSERT(i < num_); - return table_[i]; - } - - private: - void bind_to(int pos) { - ASSERT(!is_bound()); - table_[0] = pos; - num_ = -1; - } - void link_to(int pos) { - ASSERT(!is_bound()); - ASSERT(num_ < kTableSize); - - table_[num_] = pos; - ++num_; - } - - static const int kTableSize = 3; - - // We store all links in a fixed size table. When we're bound, we store the - // binding position in the first entry of the table. - int table_[kTableSize]; - // The number of entries in our table, if we're linked. If 0, then we're - // unusued. If -1, then we are bound (and the pos is at table_[0]). - int num_; - - friend class CodeBuffer; // For binding, linking, etc -}; - - -enum ScaleFactor { - SCALE_TIMES_1 = 0, - SCALE_TIMES_2 = 1, - SCALE_TIMES_4 = 2, - SCALE_TIMES_8 = 3 -}; - - -class Operand { - public: - explicit Operand(const Operand& x) : len_(x.len_) { - memcpy(buf_, x.buf_, sizeof(buf_)); - } - - // reg - explicit Operand(Register reg) { - Init(reg); - } - - // [disp/r] - explicit Operand(int disp) { - Init(disp); - } - - // [base + disp/r] - Operand(Register base, int disp) { - Init(base, disp); - } - - // [base + index*scale + disp/r] - Operand(Register base, Register index, ScaleFactor scale, int disp) { - Init(base, index, scale, disp); - } - - // [index*scale + disp/r] - Operand(Register index, ScaleFactor scale, int disp) { - Init(index, scale, disp); - } - - void set_reg(Register reg) { - ASSERT(len_ > 0); - buf_[0] = (buf_[0] & ~0x38) | static_cast(reg << 3); - } - - char* data() { return buf_; } - int length() { return len_; } - - private: - // reg - void Init(Register reg) { - set_modrm(3, reg); - } - - // [disp/r] - void Init(int disp) { - set_modrm(0, EBP); - set_dispr(disp); - } - - // [base + disp/r] - void Init(Register base, int disp) { - if (disp == 0) { - // [base] - set_modrm(0, base); - if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base); - } else if (is_int8(disp)) { - // [base + disp8] - set_modrm(1, base); - if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base); - set_disp8(disp); - } else { - // [base + disp/r] - set_modrm(2, base); - if (base == ESP) set_sib(SCALE_TIMES_1, ESP, base); - set_dispr(disp); - } - } - - // [base + index*scale + disp/r] - void Init(Register base, - Register index, - ScaleFactor scale, - int disp) { - ASSERT(index != ESP); // illegal addressing mode - if (disp == 0 && base != EBP) { - // [base + index*scale] - set_modrm(0, ESP); - set_sib(scale, index, base); - } else if (is_int8(disp)) { - // [base + index*scale + disp8] - set_modrm(1, ESP); - set_sib(scale, index, base); - set_disp8(disp); - } else { - // [base + index*scale + disp/r] - set_modrm(2, ESP); - set_sib(scale, index, base); - set_dispr(disp); - } - } - - // [index*scale + disp/r] - void Init(Register index, - ScaleFactor scale, - int disp) { - ASSERT(index != ESP); // illegal addressing mode - // We can reduce instruction size by translating instructions of the form: - // 8D044510000000 lea eax,[eax*2+0x10] - // To the more concise scale=1 version: - // 8D440010 lea eax,[eax+eax+0x10] - if (scale == SCALE_TIMES_2) { - Init(index, index, SCALE_TIMES_1, disp); - } else { - set_modrm(0, ESP); - set_sib(scale, index, EBP); - set_dispr(disp); - } - } - - // Returns true if this Operand is a wrapper for the specified register. - bool is_reg(Register reg) const { - return ((buf_[0] & 0xF8) == 0xC0) // addressing mode is register only. - && ((buf_[0] & 0x07) == reg); // register codes match. - } - - void set_modrm(int mod, Register rm) { // reg == 0 - ASSERT((mod & -4) == 0); - buf_[0] = mod << 6 | rm; - len_ = 1; - } - - void set_sib(ScaleFactor scale, Register index, Register base) { - ASSERT(len_ == 1); - ASSERT((scale & -4) == 0); - buf_[1] = scale << 6 | index << 3 | base; - len_ = 2; - } - - void set_disp8(char disp) { - ASSERT(len_ == 1 || len_ == 2); - *reinterpret_cast(&buf_[len_++]) = disp; - } - - void set_dispr(int disp) { - ASSERT(len_ == 1 || len_ == 2); - *reinterpret_cast(&buf_[len_]) = disp; - len_ += sizeof(int); - } - - bool is_int8(int x) { return x >= -128 && x <= 127; } - - // Mutable because reg in ModR/M byte is set by Assembler via set_reg(). - char buf_[6]; - // The number of bytes in buf_. - unsigned int len_; -}; - -// A convenient wrapper around a buffer for emitting code or data, etc. -class CodeBuffer { - public: - // Use an externally managed buffer - explicit CodeBuffer(char* buf) : pos_(0), buf_(buf) { } - - void* data() { return buf_; } - int size() { return pos_; } - - void emit(unsigned char b) { - buf_[pos_++] = b; - } - void emit_word(unsigned short w) { - *reinterpret_cast(&buf_[pos_]) = w; - pos_ += 2; - } - void emit_dword(unsigned int d) { - *reinterpret_cast(&buf_[pos_]) = d; - pos_ += 4; - } - - void emit_bytes(const char* bytes, size_t size) { - for (size_t i = 0; i < size; ++i) - emit(bytes[i]); - } - - void emit_bytes(const std::string& bytes) { - emit_bytes(bytes.data(), bytes.size()); - } - - void put_dword_at(int pos, unsigned int d) { - *reinterpret_cast(&buf_[pos]) = d; - } - - // We pass by value so that we get a copy that we can modify. - void emit_operand(Register reg, Operand operand) { - operand.set_reg(reg); - memcpy(&buf_[pos_], operand.data(), operand.length()); - pos_ += operand.length(); - } - - void bind(Label* l) { - ASSERT(!l->is_bound()); - for (int i = 0; i < l->num_links(); ++i) { - put_dword_at(l->link_pos(i), pos_ - (l->link_pos(i) + 4)); - } - l->bind_to(pos_); - } - - // TODO deprecate blah_imm and use blah(Immediate) - - void add(Register dst, Register src) { - emit(0x01); emit(0xc0 | (src << 3) | dst); - } - void add_imm(Register dst, int d) { - if (d >= -128 && d <= 127) { - emit(0x83); emit(0xc0 | dst); emit(d & 0xff); - } else { - emit(0x81); emit(0xc0 | dst); emit_dword(d); - } - } - - void and_(Register r, unsigned int mask) { - emit(0x81); emit(0xe0 | r); emit_dword(mask); - } - - void call(Register r) { - call(Operand(r)); - } - void call(const Operand& dst) { - emit(0xff); emit_operand(EDX, dst); - } - - void cmp(Register r1, Register r2) { - emit(0x39); emit(0xc0 | (r2 << 3) | r1); - } - - void cmp_imm(Register r, int d) { - if (d >= -128 && d <= 127) { - emit(0x83); emit(0xf8 | r); emit(d & 0xff); - } else { - emit(0x81); emit(0xf8 | r); emit_dword(d); - } - } - - void fs() { - emit(0x64); - } - - // Atomically increment the dword at |mem| with the increment amount in the - // register |inc|. Will replace |inc| with the old unincremented value. - void inc_atomic(Register mem, Register inc) { - // lock xadd [mem], inc - emit(0xF0); emit(0x0F); emit(0xC1); emit((inc << 3) | mem); - } - - void int3() { - emit(0xcc); - } - - void jcc(Condition cc, Label* l) { - emit(0x0f); emit(0x80 | cc); - if (l->is_bound()) { - emit_dword(l->binding_pos() - (pos_ + 4)); - } else { - // Will fix up when the label is bound. - l->link_to(pos_); - emit_dword(0); - } - } - - void jmp(Register r) { - emit(0xff); emit(0xe0 | r); - } - - void jmp(Label* l) { - if (l->is_bound()) { - jmp_rel(l->binding_pos() - (pos_ + 5)); - } else { - // Will fix up when the label is bound. - l->link_to(pos_ + 1); - jmp_rel(0); - } - } - - void jmp_rel(int i) { - emit(0xe9); emit_dword(i); - } - - void jmp_rel_short(char c) { - emit(0xeb); emit(c); - } - - void lea(Register dst, const Operand& src) { - emit(0x8d); emit_operand(dst, src); - } - - void lodsb() { - emit(0xac); - } - void lodsd() { - emit(0xad); - } - - void loop(Label* l) { - ASSERT(l->is_bound()); - int pos = l->binding_pos() - (pos_ + 2); - ASSERT(pos >= -128 && pos < 0); - - emit(0xe2); emit(pos & 0xff); - } - - void mov(Register dst, Register src) { - emit(0x89); emit(0xc0 | (src << 3) | dst); - } - void mov(Register dst, const Operand& src) { - emit(0x8b); emit_operand(dst, src); - } - void mov_imm(Register r, unsigned int d) { - emit(0xb8 | r); emit_dword(d); - } - - void movsb() { - emit(0xa4); - } - void movsd() { - emit(0xa5); - } - - void or_(Register r, unsigned int mask) { - emit(0x81); emit(0xc8 | r); emit_dword(mask); - } - - void pop(Register r) { - emit(0x58 | r); - } - void pop(const Operand& dst) { - emit(0x8f); emit_operand(EAX, dst); - } - - void push(Register r) { - emit(0x50 | r); - } - void push(const Operand& src) { - emit(0xff); emit_operand(ESI, src); - } - void push_imm(int i) { - if (i >= -128 && i <= 127) { - emit(0x6a); emit(i & 0xff); - } else { - emit(0x68); emit_dword(i); - } - } - - // Puts the cycle counter into edx:eax. - void rdtsc() { - emit(0x0F); emit(0x31); - } - - void rep() { - emit(0xf3); - } - - void ret() { - ret(0); - } - void ret(short c) { - if (c == 0) { - emit(0xc3); - } else { - emit(0xc2); emit_word(c); - } - } - - void spin() { - jmp_rel_short(-2); - } - - void stosb() { - emit(0xaa); - } - void stosd() { - emit(0xab); - } - - void sysenter() { - emit(0x0f); emit(0x34); - } - - // Puts a unique cpu identifier into eax, using sidt to fingerprint cores. - void which_cpu() { - // Make space - push(EAX); - push(EAX); - // sidt [esp+2] - emit(0x0f); emit(0x01); emit_operand(ECX, Operand(ESP, 2)); - pop(EAX); - pop(EAX); // sidt address - } - - // Puts a unique identifier for the thread we're executing on into eax. - void which_thread() { - // mov eax, [fs:0x24] - emit(0x64); emit(0xa1); emit_dword(0x24); - // TODO: We could do this but it will use an encoding that is 1 byte bigger. - // fs(); mov(EAX, Operand(0x24)); - } - - void xchg(Register r1, Register r2) { - if (r1 == EAX) { - emit(0x90 | r2); - } else if (r2 == EAX) { - emit(0x90 | r1); - } else { - xchg(r1, Operand(r2)); - } - } - void xchg(Register r1, const Operand& oper) { - emit(0x87); emit_operand(r1, oper); - } - - private: - int pos_; - char* buf_; -}; - -#endif // TRACELINE_ASSEMBLER_H_ diff --git a/chromium/tools/traceline/traceline/assembler_unittest.cc b/chromium/tools/traceline/traceline/assembler_unittest.cc deleted file mode 100644 index e2c17b66012..00000000000 --- a/chromium/tools/traceline/traceline/assembler_unittest.cc +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include - -#include "assembler.h" - -int main(int argc, char** argv) { - char buf[1024]; - - CodeBuffer cb(buf); - - // Branching tests first so the offsets are not always adjusting in the - // output diassembler when we add new tests. - - cb.spin(); - - cb.call(EAX); - cb.call(Operand(EAX)); - cb.call(Operand(EDX, 15)); - - cb.fs(); cb.mov(EAX, Operand(3)); - cb.fs(); cb.mov(EDX, Operand(0x04)); - - cb.lea(EAX, Operand(EAX)); - cb.lea(EAX, Operand(0x12345678)); - cb.lea(EAX, Operand(EBX, 0x12345678)); - cb.lea(EAX, Operand(EBX, ECX, SCALE_TIMES_2, 0x12345678)); - cb.lea(EAX, Operand(ECX, SCALE_TIMES_2, 0x12345678)); - cb.lea(EAX, Operand(EAX, SCALE_TIMES_2, 0)); - cb.lea(EAX, Operand(EBX, SCALE_TIMES_2, 0)); - cb.lea(EBP, Operand(EBP, SCALE_TIMES_2, 1)); - - cb.lodsb(); - cb.lodsd(); - - cb.mov(EAX, ECX); - cb.mov(ESI, ESP); - cb.mov(EAX, Operand(ESP, 0x20)); - cb.mov(EAX, Operand(EBP, 8)); - cb.mov_imm(ESP, 1); - cb.mov_imm(EAX, 0x12345678); - - cb.pop(EBX); - cb.pop(Operand(EBX)); - cb.pop(Operand(EBX, 0)); - cb.pop(Operand(EBX, 12)); - - cb.push(EBX); - cb.push(Operand(EBX)); - cb.push(Operand(EBX, 0)); - cb.push(Operand(EDI, -4)); - cb.push(Operand(EDI, -8)); - cb.push_imm(0x12); - cb.push_imm(0x1234); - cb.push(Operand(EBX, 12)); - cb.push(Operand(ESP, 0x1234)); - - cb.ret(); - cb.ret(0); - cb.ret(12); - - cb.stosb(); - cb.stosd(); - - cb.sysenter(); - - cb.which_cpu(); - cb.which_thread(); - - cb.xchg(EAX, EAX); - cb.xchg(EBX, EAX); - cb.xchg(EAX, EBX); - cb.xchg(ECX, ESP); - cb.xchg(ECX, Operand(ESP)); - cb.xchg(ECX, Operand(ESP, 5)); - cb.xchg(ECX, Operand(EDX, 4)); - - fwrite(buf, 1, cb.size(), stdout); - - return 0; -} diff --git a/chromium/tools/traceline/traceline/assembler_unittest.sh b/chromium/tools/traceline/traceline/assembler_unittest.sh deleted file mode 100755 index 6be6191bf12..00000000000 --- a/chromium/tools/traceline/traceline/assembler_unittest.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2009 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -./assembler_unittest.exe | ndisasm -u - | cut -c 11- diff --git a/chromium/tools/traceline/traceline/assembler_unittest.sh.expected b/chromium/tools/traceline/traceline/assembler_unittest.sh.expected deleted file mode 100644 index a0d3af30a2d..00000000000 --- a/chromium/tools/traceline/traceline/assembler_unittest.sh.expected +++ /dev/null @@ -1,54 +0,0 @@ -EBFE jmp short 0x0 -FFD0 call eax -FFD0 call eax -FF520F call dword near [edx+0xf] -648B0503000000 mov eax,[dword fs:0x3] -648B1504000000 mov edx,[dword fs:0x4] -8D db 0x8D -C08D0578563412 ror byte [ebp+0x34567805],0x12 -8D8378563412 lea eax,[ebx+0x12345678] -8D844B78563412 lea eax,[ebx+ecx*2+0x12345678] -8D840978563412 lea eax,[ecx+ecx+0x12345678] -8D0400 lea eax,[eax+eax] -8D041B lea eax,[ebx+ebx] -8D6C2D01 lea ebp,[ebp+ebp+0x1] -AC lodsb -AD lodsd -89C8 mov eax,ecx -89E6 mov esi,esp -8B442420 mov eax,[esp+0x20] -8B4508 mov eax,[ebp+0x8] -BC01000000 mov esp,0x1 -B878563412 mov eax,0x12345678 -5B pop ebx -8FC3 pop ebx -8F03 pop dword [ebx] -8F430C pop dword [ebx+0xc] -53 push ebx -FFF3 push ebx -FF33 push dword [ebx] -FF77FC push dword [edi-0x4] -FF77F8 push dword [edi-0x8] -6A12 push byte +0x12 -6834120000 push 0x1234 -FF730C push dword [ebx+0xc] -FFB42434120000 push dword [esp+0x1234] -C3 ret -C3 ret -C20C00 ret 0xc -AA stosb -AB stosd -0F34 sysenter -50 push eax -50 push eax -0F014C2402 sidt [esp+0x2] -58 pop eax -58 pop eax -64A124000000 mov eax,[fs:0x24] -90 nop -93 xchg eax,ebx -93 xchg eax,ebx -87CC xchg ecx,esp -87CC xchg ecx,esp -874C2405 xchg ecx,[esp+0x5] -874A04 xchg ecx,[edx+0x4] diff --git a/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb b/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb deleted file mode 100755 index 6e0fb8fe9d7..00000000000 --- a/chromium/tools/traceline/traceline/dump_syscalls_idarub.rb +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env ruby - -# Copyright (c) 2009 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This is an idarub script for extracting system call numbers from a DLL that -# has been loaded into the IDA disassembler. The interesting system call stubs -# are contained in ntdll.dll, user32.dll, gdi32.dll, and imm32.dll. - -require 'idarub' - -ida, = IdaRub.auto_client - -curea = 0 - -filename = ida.get_root_filename - -while true - curea = ida.find_binary( - curea, ida.BADADDR, 'ba 00 03 fe 7f', 16, ida.SEARCH_DOWN) - break if curea == ida.BADADDR - - raise "z" if ida.get_byte(curea - 5) != 0xb8 - - syscall = ida.get_long(curea - 4) - # Remove the IDA _ prefix and the @argsize trailing decorator... - funcname = ida.get_func_name(curea).split('@', 2)[0].split('_', 2)[-1] - puts '%d: "%s!%s",' % [syscall, filename, funcname] - - curea += 1 -end diff --git a/chromium/tools/traceline/traceline/logging.h b/chromium/tools/traceline/traceline/logging.h deleted file mode 100644 index bf2e4fa0684..00000000000 --- a/chromium/tools/traceline/traceline/logging.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef TRACELINE_LOGGING_H_ -#define TRACELINE_LOGGING_H_ - -#include -#include - -#define CHECK(exp, ...) \ - if (!(exp)) { \ - printf("FAILED CHECK: %s\n %s:%d\n", #exp, __FILE__, __LINE__); \ - printf("\naborted.\n"); \ - if (::IsDebuggerPresent()) __debugbreak(); \ - exit(1); \ - } - -#define NOTREACHED(...) \ - if (1) { \ - printf("NOTREACHED:\n %s:%d\n", __FILE__, __LINE__); \ - printf(__VA_ARGS__); \ - printf("\naborted.\n"); \ - if (::IsDebuggerPresent()) __debugbreak(); \ - exit(1); \ - } - -#endif // TRACELINE_LOGGING_H_ diff --git a/chromium/tools/traceline/traceline/main.cc b/chromium/tools/traceline/traceline/main.cc deleted file mode 100644 index 11d9e52437c..00000000000 --- a/chromium/tools/traceline/traceline/main.cc +++ /dev/null @@ -1,1339 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO -// - Make capturing system call arguments optional and the number configurable. -// - Lots of places depend on the ABI so that we can modify EAX or EDX, this -// is safe, but these could be moved to be saved and restored anyway. -// - Understand the loader better, and make some more meaningful hooks with -// proper data collection and durations. Right now it's just noise. -// - Get the returned pointer from AllocateHeap. - -#include - -#include - -#include -#include - -#include "assembler.h" -#include "logging.h" -#include "rdtsc.h" -#include "sym_resolver.h" -#include "syscall_map.h" - -#include "sidestep/mini_disassembler.h" - -namespace { - -std::string JSONString(const std::string& str) { - static const char hextable[] = "0123456789abcdef"; - std::string out; - out.push_back('"'); - for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) { - unsigned char c = static_cast(*it); - switch (c) { - case '\\': - case '"': - case '\'': - out.push_back('\\'); out.push_back(c); - break; - default: - if (c < 20 || c >= 127) { - out.push_back('\\'); out.push_back('x'); - out.push_back(hextable[c >> 4]); out.push_back(hextable[c & 0xf]); - } else { - // Unescaped. - out.push_back(c); - } - break; - } - } - out.push_back('"'); - return out; -} - -} // namespace - -class Playground { - public: - static const int kPlaygroundSize = 64 * 1024 * 1024; - - // Encapsulate the configuration options to the playground. - class Options { - public: - Options() - : stack_unwind_depth_(0), - log_heap_(false), - log_lock_(false), - vista_(false) { } - - - // The maximum amount of frames we should unwind from the call stack. - int stack_unwind_depth() { return stack_unwind_depth_; } - void set_stack_unwind_depth(int depth) { stack_unwind_depth_ = depth; } - - // Whether we should log heap operations (alloc / free). - bool log_heap() { return log_heap_; } - void set_log_heap(bool x) { log_heap_ = x; } - - // Whether we should log lock (critical section) operations. - bool log_lock() { return log_lock_; } - void set_log_lock(bool x) { log_lock_ = x; } - - // Whether we are running on Vista. - bool vista() { return vista_; } - void set_vista(bool x) { vista_ = x; } - - private: - int stack_unwind_depth_; - bool log_heap_; - bool log_lock_; - bool vista_; - }; - - Playground(HANDLE proc, const Options& options) - : proc_(proc), - remote_addr_(NULL), - resolver_("ntdll.dll"), - options_(options) { - // We copy the entire playground into the remote process, and we have - // fields that we expect to be zero. TODO this could be a lot better. - memset(buf_, 0, sizeof(buf_)); - } - - void AllocateInRemote() { - // Try to get something out of the way and easy to debug. - static void* kPlaygroundAddr = reinterpret_cast(0x66660000); - // Allocate our playground memory in the target process. This is a big - // slab of read/write/execute memory that we use for our code - // instrumentation, and the memory for writing out our logging events. - remote_addr_ = reinterpret_cast( - VirtualAllocEx(proc_, - kPlaygroundAddr, - kPlaygroundSize, - MEM_COMMIT | MEM_RESERVE, - PAGE_EXECUTE_READWRITE)); - if (remote_addr_ == NULL || remote_addr_ != kPlaygroundAddr) { - NOTREACHED("Falied to allocate playground: 0x%08x", remote_addr_); - } - } - - void CopyToRemote() { - WriteProcessMemory(proc_, - remote_addr_, - buf_, - sizeof(buf_), - NULL); - } - - void CopyFromRemote() { - SIZE_T size = 0; - ReadProcessMemory(proc_, - remote_addr_, - buf_, - sizeof(buf_), - &size); - } - - enum EventRecordType { - EVENT_TYPE_LDR = 0, - EVENT_TYPE_THREADBEGIN = 1, - EVENT_TYPE_THREADNAME = 2, - EVENT_TYPE_EXCEPTION = 3, - EVENT_TYPE_PROCESSEXIT = 4, - EVENT_TYPE_CREATETHREAD = 5, - EVENT_TYPE_THREADEXIT = 6, - EVENT_TYPE_ALLOCHEAP = 7, - EVENT_TYPE_FREEHEAP = 8, - EVENT_TYPE_SYSCALL = 9, - EVENT_TYPE_ENTER_CS = 10, - EVENT_TYPE_TRYENTER_CS = 11, - EVENT_TYPE_LEAVE_CS = 12, - EVENT_TYPE_APC = 13 - }; - - static const int kThreadNameBufSize = 64; - static const int kLdrBufSize = 512; // Looks like internal buffer is 512. - - static const int kCodeBlockSize = 256; - - static const int kOffLdrCode = 0 * kCodeBlockSize; - static const int kOffCreateThreadCode = 1 * kCodeBlockSize; - static const int kOffThreadCode = 2 * kCodeBlockSize; - static const int kOffExpCode = 3 * kCodeBlockSize; - static const int kOffExitCode = 4 * kCodeBlockSize; - static const int kOffThreadExitCode = 5 * kCodeBlockSize; - static const int kOffAllocHeapCode = 6 * kCodeBlockSize; - static const int kOffFreeHeapCode = 7 * kCodeBlockSize; - static const int kOffSyscallCode = 8 * kCodeBlockSize; - static const int kOffEnterCritSecCode = 9 * kCodeBlockSize; - static const int kOffTryEnterCritSecCode = 10 * kCodeBlockSize; - static const int kOffLeaveCritSecCode = 11 * kCodeBlockSize; - static const int kOffApcDispCode = 12 * kCodeBlockSize; - - static const int kOffLogAreaPtr = 4096; - static const int kOffLogAreaData = 4096 + 4; - - static const int kRecordHeaderSize = 8 + 4 + 4 + 4; - - // Given the address to the start of a function, patch the function to jump - // to a given offset into the playground. This function will try to take - // advantage of hotpatch code, if the function is prefixed with 5 0x90 bytes. - // Returns a std::string of any assembly instructions that must be relocated, - // as they were overwritten during patching. - std::string PatchPreamble(int func_addr, int playground_off) { - sidestep::MiniDisassembler disas; - int stub_addr = reinterpret_cast(remote_addr_ + playground_off); - - std::string instrs; - - char buf[15]; - if (ReadProcessMemory(proc_, - reinterpret_cast(func_addr - 5), - buf, - sizeof(buf), - NULL) == 0) { - NOTREACHED("ReadProcessMemory(0x%08x) failed: %d", - func_addr - 5, GetLastError()); - } - - // TODO(deanm): It seems in more recent updates the compiler is generating - // complicated sequences for padding / alignment. For example: - // 00000000 8DA42400000000 lea esp,[esp+0x0] - // 00000007 8D4900 lea ecx,[ecx+0x0] - // is used for a 16 byte alignment. We need a better way of handling this. - if (memcmp(buf, "\x90\x90\x90\x90\x90", 5) == 0 || - memcmp(buf, "\x00\x8D\x64\x24\x00", 5) == 0 || - memcmp(buf, "\x00\x00\x8D\x49\x00", 5) == 0) { - unsigned int instr_bytes = 0; - - // We might have a hotpatch no-op of mov edi, edi "\x8b\xff". It is a - // bit of a waste to relocate it, but it makes everything simpler. - - while (instr_bytes < 2) { - if (disas.Disassemble( - reinterpret_cast(buf + 5 + instr_bytes), - &instr_bytes) != sidestep::IT_GENERIC) { - NOTREACHED("Could not disassemble or relocate instruction."); - } - // We only read 10 bytes worth of instructions. - CHECK(instr_bytes < 10); - } - - instrs.assign(buf + 5, instr_bytes); - - // We have a hotpatch prefix of 5 nop bytes. We can use this for our - // long jump, and then overwrite the first 2 bytes to jump back to there. - CodeBuffer patch(buf); - int off = stub_addr - func_addr; - patch.jmp_rel(off); - patch.jmp_rel_short(-2 - 5); - } else { - // We need a full 5 bytes for the jump. - unsigned int instr_bytes = 0; - while (instr_bytes < 5) { - if (disas.Disassemble( - reinterpret_cast(buf + 5 + instr_bytes), - &instr_bytes) != sidestep::IT_GENERIC) { - NOTREACHED("Could not disassemble or relocate instruction."); - } - // We only read 10 bytes worth of instructions. - CHECK(instr_bytes < 10); - } - - instrs.assign(buf + 5, instr_bytes); - - // Overwrite the first 5 bytes with a relative jump to our stub. - CodeBuffer patch(buf + 5); - int off = stub_addr - (func_addr + 5); - patch.jmp_rel(off); - } - - // Write back the bytes, we are really probably writing more back than we - // need to, but it shouldn't really matter. - if (WriteProcessMemory(proc_, - reinterpret_cast(func_addr - 5), - buf, - sizeof(buf), - NULL) == 0) { - NOTREACHED("WriteProcessMemory(0x%08x) failed: %d", - func_addr - 5, GetLastError()); - } - - return instrs; - } - - std::string PatchPreamble(const char* func_name, int playground_off) { - return PatchPreamble( - reinterpret_cast(resolver_.Resolve(func_name)), playground_off); - } - - // Restore any instructions that needed to be moved to make space for our - // patch and jump back to the original code. - void ResumeOriginalFunction(const char* func_name, - const std::string& moved_instructions, - int stub_offset, - CodeBuffer* cb) { - cb->emit_bytes(moved_instructions); - int off = resolver_.Resolve(func_name) + - moved_instructions.size() - - (remote_addr_ + stub_offset + cb->size() + 5); - cb->jmp_rel(off); - } - - // Makes a call to NtQueryPerformanceCounter, writing the timestamp to the - // buffer pointed to by EDI. EDI it not incremented. EAX is not preserved. - void AssembleQueryPerformanceCounter(CodeBuffer* cb) { - // Make a call to NtQueryPerformanceCounter and write the result into - // the log area. The buffer we write to should be aligned, but we should - // garantee that anyway for the logging area for performance. - cb->push_imm(0); // PerformanceFrequency - cb->push(EDI); // PerformanceCounter - cb->mov_imm(EAX, reinterpret_cast( - resolver_.Resolve("ntdll!NtQueryPerformanceCounter"))); - cb->call(EAX); - } - - // This is the common log setup routine. It will allocate a new log entry, - // and write out the common log header to the event entry. The header is: - // is [ 64bit QPC ] [ 32bit cpu id ] [ 32bit thread id ] [ 32bit rec id ] - // EDI will be left pointing to the log entry, with |space| bytes left for - // type specific data. All other registers should not be clobbered. - void AssembleHeaderCode(CodeBuffer* cb, EventRecordType rt, int space) { - cb->push(EAX); - cb->push(EDX); - cb->push(ECX); - cb->push(ESI); - - int unwind_depth = options_.stack_unwind_depth(); - - // Load EDI with the number of bytes we want for our log entry, this will - // be used in the atomic increment to allocate the log entry. - cb->mov_imm(EDI, kRecordHeaderSize + (unwind_depth * 4) + space); - // Do the increment and have EDI point to our log entry buffer space. - cb->mov_imm(EDX, reinterpret_cast(remote_addr_ + kOffLogAreaPtr)); - cb->inc_atomic(EDX, EDI); - // EDI is the buffer offset, make it a pointer to the record entry. - cb->add_imm(EDI, reinterpret_cast(remote_addr_ + kOffLogAreaData)); - - AssembleQueryPerformanceCounter(cb); - cb->add_imm(EDI, 8); - - cb->which_cpu(); - cb->stosd(); - - cb->which_thread(); - cb->stosd(); - - // Stack unwinding, follow EBP to the maximum number of frames, and make - // sure that it stays on the stack (between ESP and TEB.StackBase). - if (unwind_depth > 0) { - cb->mov_imm(ECX, unwind_depth); - cb->fs(); cb->mov(EDX, Operand(0x04)); // get TEB.StackBase - - // Start at EBP. - cb->mov(EAX, EBP); - - Label unwind_loop, bail; - cb->bind(&unwind_loop); - - // Bail if (EAX < ESP) (below the stack) - cb->cmp(EAX, ESP); - cb->jcc(below, &bail); - // Bail if (EAX >= EDX) (above the stack) - cb->cmp(EAX, EDX); - cb->jcc(above_equal, &bail); - - // We have a valid stack pointer, it should point to something like: - // [ saved frame pointer ] [ return address ] [ arguments ... ] - cb->mov(ESI, EAX); - cb->lodsd(); // Get the new stack pointer to follow in EAX - cb->movsd(); // Copy the return address to the log area. - - cb->loop(&unwind_loop); - - cb->bind(&bail); - // If we did managed to unwind to the max, fill the rest with 0 (really - // we just want to inc EDI to the end, and this is an easy way). - cb->mov_imm(EAX, 0); // TODO use an xor - cb->rep(); cb->stosd(); - } - - // Store the type for this record entry. - cb->mov_imm(EAX, rt); - cb->stosd(); - - cb->pop(ESI); - cb->pop(ECX); - cb->pop(EDX); - cb->pop(EAX); - } - - void PatchLoader() { - static const EventRecordType kRecordType = EVENT_TYPE_LDR; - static const char* kFuncName = "ntdll!DebugPrint"; - static const int kStubOffset = kOffLdrCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - // Set ShowSnaps to one to get the print routines to be called. - char enabled = 1; - WriteProcessMemory( - proc_, resolver_.Resolve("ntdll!ShowSnaps"), &enabled, 1, NULL); - - CodeBuffer cb(buf_ + kStubOffset); - - cb.pop(EDX); // return address - cb.pop(EAX); // First param in eax - cb.push(ESI); - cb.push(EDI); - cb.push(EDX); - - cb.mov(ESI, EAX); // ESI points at the string structure. - - // We used to do variable length based on the length supplied in the str - // structure, but it's easier (and sloppier) to just copy a fixed amount. - AssembleHeaderCode(&cb, kRecordType, kLdrBufSize); - - cb.lodsd(); // Load the character count - cb.lodsd(); // Load the char* - cb.mov(ESI, EAX); - cb.mov_imm(ECX, kLdrBufSize / 4); // load the char count as the rep count - cb.rep(); cb.movsb(); // Copy the string to the logging buffer - - // Return - cb.pop(EDX); - cb.pop(EDI); - cb.pop(ESI); - cb.pop(ECX); // don't care - cb.pop(ECX); // don't care - cb.jmp(EDX); - } - - void PatchCreateThread() { - static const EventRecordType kRecordType = EVENT_TYPE_CREATETHREAD; - static const char* kFuncName = - options_.vista() ? "ntdll!NtCreateThreadEx" : "ntdll!NtCreateThread"; - static const int kStubOffset = kOffCreateThreadCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - cb.push(ESI); - - AssembleHeaderCode(&cb, kRecordType, 8); - - cb.mov(EAX, Operand(ESP, 0x18 + 8)); - - // Super ugly hack. To coorrelate between creating a thread and the new - // thread running, we stash something to identify the creating event when - // we log the created event. We just use a pointer to the event log data - // since this will be unique and can tie the two events together. We pass - // it by writing into the context structure, so it will be passed in ESI. - cb.add_imm(EAX, 0xa0); - cb.push(EDI); - cb.mov(EDI, EAX); - cb.pop(EAX); - cb.push(EAX); - cb.stosd(); - - // Get and save CONTEXT.Eip - cb.mov(ESI, EDI); - cb.add_imm(ESI, 20); - cb.pop(EDI); - cb.mov(EAX, EDI); - cb.stosd(); // Record the event identifier to tie together the events. - cb.movsd(); // write Eip to the log event - - cb.pop(ESI); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - void PatchThreadBegin() { - static const EventRecordType kRecordType = EVENT_TYPE_THREADBEGIN; - static const char* kFuncName = "ntdll!CsrNewThread"; - static const int kStubOffset = kOffThreadCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - - AssembleHeaderCode(&cb, kRecordType, 8); - - cb.mov(EAX, ESI); // We stashed the creator's eventid in the context ESI. - cb.stosd(); - - // TODO(deanm): The pointer is going to point into the CRT or something, - // should we dig deeper to get more information about the real entry? - cb.mov(EAX, Operand(EBP, 0x8)); - cb.stosd(); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - void PatchThreadBeginVista() { - static const EventRecordType kRecordType = EVENT_TYPE_THREADBEGIN; - static const char* kFuncName = "ntdll!_RtlUserThreadStart"; - static const int kStubOffset = kOffThreadCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - - AssembleHeaderCode(&cb, kRecordType, 8); - - cb.mov(EAX, ESI); // We stashed the creator's eventid in the context ESI. - cb.stosd(); - - // TODO(deanm): The pointer is going to point into the CRT or something, - // should we dig deeper to get more information about the real entry? - //cb.mov(EAX, Operand(EBP, 0x8)); - cb.mov_imm(EAX, 0); - cb.stosd(); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - // Intercept exception dispatching so we can catch when threads set a thread - // name (which is an exception with a special code). TODO it could be - // useful to log all exceptions. - void PatchSetThreadName() { - static const EventRecordType kRecordType = EVENT_TYPE_THREADNAME; - static const char* kFuncName = "ntdll!RtlDispatchException"; - static const int kStubOffset = kOffExpCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - CodeBuffer cb(buf_ + kStubOffset); - - cb.pop(EDX); // return address - cb.pop(EAX); // ExceptionRecord - cb.push(EAX); - cb.push(EDX); - - cb.push(ESI); - - cb.mov(ESI, EAX); - cb.lodsd(); - - Label bail; - // exception code - cb.cmp_imm(EAX, 0x406D1388); - cb.jcc(not_equal, &bail); - - cb.push(EDI); - - AssembleHeaderCode(&cb, kRecordType, kThreadNameBufSize); - - // Fetch the second parameter. - for (int i = 0; i < 6; ++i) { - cb.lodsd(); - } - - // TODO This is sloppy and we could run into unmapped memory... - cb.mov(ESI, EAX); - cb.mov_imm(ECX, kThreadNameBufSize / 4); - cb.rep(); cb.movsd(); - - cb.pop(EDI); - - cb.bind(&bail); - cb.pop(ESI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - - void PatchThreadExit() { - static const EventRecordType kRecordType = EVENT_TYPE_THREADEXIT; - static const char* kFuncName = "ntdll!LdrShutdownThread"; - static const int kStubOffset = kOffThreadExitCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - AssembleHeaderCode(&cb, kRecordType, 0); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - void PatchAllocateHeap() { - static const EventRecordType kRecordType = EVENT_TYPE_ALLOCHEAP; - static const char* kFuncName = "ntdll!RtlAllocateHeap"; - static const int kStubOffset = kOffAllocHeapCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - cb.push(ESI); - - AssembleHeaderCode(&cb, kRecordType, 12); - - cb.mov(ESI, ESP); - cb.add_imm(ESI, 12); // Skip over our saved and the return address - cb.movsd(); cb.movsd(); cb.movsd(); // Copy the 3 parameters - - cb.pop(ESI); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - void PatchFreeHeap() { - static const EventRecordType kRecordType = EVENT_TYPE_FREEHEAP; - static const char* kFuncName = "ntdll!RtlFreeHeap"; - static const int kStubOffset = kOffFreeHeapCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - cb.push(ESI); - - AssembleHeaderCode(&cb, kRecordType, 12); - - cb.mov(ESI, ESP); - cb.add_imm(ESI, 12); // Skip over our saved and the return address - cb.movsd(); cb.movsd(); cb.movsd(); // Copy the 3 parameters - - cb.pop(ESI); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - // Don't even bother going back to the original code, just implement our - // own KiFastSystemCall. The original looks like: - // .text:7C90EB8B mov edx, esp - // .text:7C90EB8D sysenter - // .text:7C90EB8F nop - // .text:7C90EB90 nop - // .text:7C90EB91 nop - // .text:7C90EB92 nop - // .text:7C90EB93 nop - void PatchSyscall() { - static const EventRecordType kRecordType = EVENT_TYPE_SYSCALL; - static const char* kFuncName = "ntdll!KiFastSystemCall"; - static const int kStubOffset = kOffSyscallCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - { - CodeBuffer cb(buf_ + kStubOffset); - - Label skip; - - // Skip 0xa5 which is QueryPerformanceCounter, to make sure we don't log - // our own logging's QPC. Disabled for now, using ret addr check... - // cb.cmp_imm(EAX, 0xa5); - // cb.jcc(equal, &skip); - - // Check if the return address is from 0x6666 (our code region). - // 66817C24066666 cmp word [esp+0x6],0x6666 - cb.emit(0x66); cb.emit(0x81); cb.emit(0x7C); - cb.emit(0x24); cb.emit(0x06); cb.emit(0x66); cb.emit(0x66); - cb.jcc(equal, &skip); - - // This is all a bit shit. Originally I thought I could store some state - // on the stack above ESP, however, it seems that when APCs, etc are - // queued, they will use the stack above ESP. Well, not above ESP, above - // what was passed in as EDX into the systemcall, not matter if ESP was - // different than this :(. So we need to store our state in the event - // log record, and then we stick a pointer to that over a ret addr... - - // Our stack starts like: - // [ ret addr ] [ ret addr 2 ] [ arguments ] - // We will update it to look like - // [ ret stub addr ] [ event entry ptr ] [ arguments ] - - cb.push(EDI); // save EDI since we're using it - AssembleHeaderCode(&cb, kRecordType, 16 + 16 + 8); - cb.mov(EDX, EAX); // Save EAX... - cb.stosd(); // eax is the syscall number - cb.pop(EAX); - cb.stosd(); // store the saved EDI - cb.pop(EAX); - cb.stosd(); // store the real return address - cb.pop(EAX); - cb.stosd(); // store the real (secondary) return address; - - cb.push(ESI); - cb.mov(ESI, ESP); - cb.lodsd(); - cb.movsd(); // argument 1 - cb.movsd(); // argument 2 - cb.movsd(); // argument 3 - cb.pop(ESI); - - cb.push(EDI); // store our event ptr over the secondary ret addr. - cb.push_imm(reinterpret_cast(remote_addr_ + kOffSyscallCode + 200)); - cb.mov(EAX, EDX); // restore EAX - - cb.bind(&skip); - cb.mov(EDX, ESP); - cb.sysenter(); - - if (cb.size() > 200) { - NOTREACHED("code too big: %d", cb.size()); - } - } - - { - CodeBuffer cb(buf_ + kStubOffset + 200); - - // TODO share the QPC code, this is a copy and paste... - - cb.pop(EDI); // get the log area - - cb.stosd(); // Log the system call return value. - - // QPC will clobber EAX, and it's very important to save it since it - // is the return value from the system call. TODO validate if there is - // anything else we need to save... - cb.push(EAX); - AssembleQueryPerformanceCounter(&cb); - cb.pop(EAX); - - // We need to: - // - Restore the original "seconary" return address - // - Restore the original value of the EDI register - // - Jump control flow to the original return address - // All 3 of these values are stored in the log record... - // [ syscall num ] [ saved edi ] [ real rets ] [ args ] [ retval ] [ ts ] - // currently edi points here ----^ - - cb.push(Operand(EDI, -4 - 16)); // push the real 2nd ret - cb.push(Operand(EDI, -8 - 16)); // push the real ret - cb.push(Operand(EDI, -12 - 16)); // push the saved EDI - - cb.pop(EDI); // restore EDI that was saved in the record - cb.ret(); // jmp back to the real ret ... - - if (cb.size() > 56) { - NOTREACHED("ug"); - } - } - } - - // Patch lock (criticial section) holding. - void PatchEnterCriticalSection() { - static const EventRecordType kRecordType = EVENT_TYPE_ENTER_CS; - static const char* kFuncName = "ntdll!RtlEnterCriticalSection"; - static const int kStubOffset = kOffEnterCritSecCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - // We just want to capture the return address and original argument, so - // we know when EnterCriticalSection returned, we don't want to know when - // it entered because it could sit waiting. We want to know when the lock - // actually started being held. The compiler will sometimes generated code - // that overwrites arguments, so we'll keep a copy of the argument just in - // case code like this is ever generated in the future. TODO is it enough - // to just assume a LPCRITICAL_SECTION uniquely identifies the lock, or - // can the same lock have multiple different copies, I would assume not. - { - CodeBuffer cb(buf_ + kStubOffset); - - // Set up an additional frame so that we capture the return. - // TODO use memory instructions instead of using registers. - cb.pop(EAX); // return address - cb.pop(EDX); // first argument (critical section pointer) - - cb.push(EDX); - cb.push(EAX); - cb.push(EDX); - cb.push_imm( - reinterpret_cast(remote_addr_ + kStubOffset + 40)); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - CHECK(cb.size() < 40); - } - - { - CodeBuffer cb(buf_ + kStubOffset + 40); - - cb.push(ESI); - cb.mov(ESI, ESP); - cb.push(EAX); - cb.push(EDI); - - AssembleHeaderCode(&cb, kRecordType, 4); - - cb.lodsd(); // Skip over our saved ESI - cb.lodsd(); // Skip over the return address - cb.movsd(); // Write the CRITICAL_SECTION* to the event record. - - cb.pop(EDI); - cb.pop(EAX); - cb.pop(ESI); - - cb.ret(0x04); - } - } - - void PatchTryEnterCriticalSection() { - static const EventRecordType kRecordType = EVENT_TYPE_TRYENTER_CS; - static const char* kFuncName = "ntdll!RtlTryEnterCriticalSection"; - static const int kStubOffset = kOffTryEnterCritSecCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - { - CodeBuffer cb(buf_ + kStubOffset); - - // Set up an additional frame so that we capture the return. - // TODO use memory instructions instead of using registers. - cb.pop(EAX); // return address - cb.pop(EDX); // first argument (critical section pointer) - - cb.push(EDX); - cb.push(EAX); - cb.push(EDX); - cb.push_imm(reinterpret_cast(remote_addr_ + kStubOffset + 40)); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - CHECK(cb.size() < 40); - } - - { - CodeBuffer cb(buf_ + kStubOffset + 40); - - cb.push(ESI); - cb.mov(ESI, ESP); - cb.push(EDI); - - cb.push(EAX); - - AssembleHeaderCode(&cb, kRecordType, 8); - - cb.lodsd(); // Skip over our saved ESI - cb.lodsd(); // Skip over the return address - cb.movsd(); // Write the CRITICAL_SECTION* to the event record. - - cb.pop(EAX); - cb.stosd(); // Write the return value to the event record. - - cb.pop(EDI); - cb.pop(ESI); - - cb.ret(0x04); - } - } - - void PatchLeaveCriticalSection() { - static const EventRecordType kRecordType = EVENT_TYPE_LEAVE_CS; - static const char* kFuncName = "ntdll!RtlLeaveCriticalSection"; - static const int kStubOffset = kOffLeaveCritSecCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - CodeBuffer cb(buf_ + kStubOffset); - - // TODO use memory instructions instead of using registers. - cb.pop(EDX); // return address - cb.pop(EAX); // first argument (critical section pointer) - cb.push(EAX); - cb.push(EDX); - - cb.push(EDI); - AssembleHeaderCode(&cb, kRecordType, 4); - cb.stosd(); // Write the CRITICAL_SECTION* to the event record. - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - // Patch APC dispatching. This is a bit hacky, since the return to kernel - // mode is done with NtContinue, we have to shim in a stub return address to - // catch when the callback is finished. It is probably a bit fragile. - void PatchApcDispatcher() { - static const EventRecordType kRecordType = EVENT_TYPE_APC; - static const char* kFuncName = "ntdll!KiUserApcDispatcher"; - static const int kStubOffset = kOffApcDispCode; - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - - { - CodeBuffer cb(buf_ + kStubOffset); - - // We don't really need to preserve these since we're the first thing - // executing from the kernel dispatch, but yeah, it is good practice. - cb.push(EDI); - cb.push(EAX); - - AssembleHeaderCode(&cb, kRecordType, 4 + 4 + 8); - - cb.mov_imm(EAX, reinterpret_cast(remote_addr_ + kStubOffset + 140)); - cb.xchg(EAX, Operand(ESP, 8)); // Swap the callback address with ours. - cb.stosd(); // Store the original callback function address. - - // TODO for now we're lazy and depend that ESI will be preserved, and we - // use it to store the pointer into our log record. EDI isn't preserved. - cb.mov(ESI, EDI); - - cb.pop(EAX); - cb.pop(EDI); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - - CHECK(cb.size() < 140); - } - { - CodeBuffer cb(buf_ + kStubOffset + 140); - - // This is our shim, we need to call the original callback function, then - // we can catch the return and log when it was completed. - cb.pop(EAX); // The real return address, safe to use EAX w/ the ABI? - cb.push(EDI); - - cb.mov(EDI, ESI); - cb.stosd(); // Store the real return address, we'll need it. - - cb.add_imm(ESI, -4); - cb.lodsd(); // Load the real callback address. - - cb.mov(ESI, EDI); - cb.pop(EDI); - - cb.call(EAX); // Call the original callback address. - - cb.push(EAX); - cb.push(EDI); - - cb.mov(EDI, ESI); - AssembleQueryPerformanceCounter(&cb); - - cb.pop(EDI); - cb.pop(EAX); - - cb.push(Operand(ESI, -4)); // Push the real return address. - cb.ret(); // Return back to the APC Dispatcher. - - CHECK(cb.size() < 50); - } - } - - // We need to hook into process shutdown for two reasons. Most importantly, - // we need to copy the playground back from the process before the address - // space goes away. We could avoid this with shared memory, however, there - // is a reason two. In order to capture symbols for all of the libraries - // loaded into arbitrary applications, on shutdown we do an instrusive load - // of symbols into the traced process. - // - // ntdll!LdrShutdownProcess - // - NtSetEvent(event, 0); - // - NtWaitForSingleObject(event, FALSE, NULL); - // - jmp back - void PatchExit(HANDLE exiting, HANDLE exited) { - static const EventRecordType kRecordType = EVENT_TYPE_PROCESSEXIT; - static const char* kFuncName = "ntdll!LdrShutdownProcess"; - static const int kStubOffset = kOffExitCode; - - HANDLE rexiting, rexited; - if (!DuplicateHandle(::GetCurrentProcess(), - exiting, - proc_, - &rexiting, - 0, - FALSE, - DUPLICATE_SAME_ACCESS)) { - NOTREACHED(""); - } - if (!DuplicateHandle(::GetCurrentProcess(), - exited, - proc_, - &rexited, - 0, - FALSE, - DUPLICATE_SAME_ACCESS)) { - NOTREACHED(""); - } - - std::string moved_instructions = PatchPreamble(kFuncName, kStubOffset); - CodeBuffer cb(buf_ + kStubOffset); - - cb.push(EDI); - AssembleHeaderCode(&cb, kRecordType, 0); - cb.pop(EDI); - - // NtSetEvent(exiting, 0); - cb.push_imm(0); - cb.push_imm(reinterpret_cast(rexiting)); - cb.mov_imm(EAX, reinterpret_cast( - resolver_.Resolve("ntdll!NtSetEvent"))); - cb.call(EAX); - - // NtWaitForSingleObject(exited, FALSE, INFINITE); - cb.push_imm(0); - cb.push_imm(0); - cb.push_imm(reinterpret_cast(rexited)); - cb.mov_imm(EAX, reinterpret_cast( - resolver_.Resolve("ntdll!NtWaitForSingleObject"))); - cb.call(EAX); - - ResumeOriginalFunction(kFuncName, moved_instructions, kStubOffset, &cb); - } - - - void Patch() { - if (options_.vista()) { - // TODO(deanm): Make PatchCreateThread work on Vista. - PatchThreadBeginVista(); - } else { - PatchCreateThread(); - PatchThreadBegin(); - } - - PatchThreadExit(); - PatchSetThreadName(); - PatchSyscall(); - - PatchApcDispatcher(); - - // The loader logging needs to be improved a bit to really be useful. - //PatchLoader(); - - // These are interesting, but will collect a ton of data: - if (options_.log_heap()) { - PatchAllocateHeap(); - PatchFreeHeap(); - } - if (options_.log_lock()) { - PatchEnterCriticalSection(); - PatchTryEnterCriticalSection(); - PatchLeaveCriticalSection(); - } - } - - // Dump the event records from the playground to stdout in a JSON format. - // TODO: Drop RDTSCNormalizer, it was from old code that tried to use the - // rdtsc counters from the CPU, and this required a bunch of normalization - // to account for non-syncronized timestamps across different cores, etc. - void DumpJSON(RDTSCNormalizer* rdn, SymResolver* res) { - int pos = kOffLogAreaPtr; - int i = IntAt(pos); - pos += 4; - - std::map syscalls = CreateSyscallMap(); - - printf("parseEvents([\n"); - for (int end = pos + i; pos < end; ) { - printf("{\n"); - __int64 ts = Int64At(pos); - pos += 8; - void* cpuid = reinterpret_cast(IntAt(pos)); - pos += 4; - printf("'ms': %f,\n", rdn->MsFromStart(cpuid, ts)); - - printf("'cpu': 0x%x,\n'thread': 0x%x,\n", cpuid, IntAt(pos)); - pos += 4; - - if (options_.stack_unwind_depth() > 0) { - printf("'stacktrace': [\n"); - for (int i = 0; i < options_.stack_unwind_depth(); ++i) { - int retaddr = IntAt(pos + (i * 4)); - if (!retaddr) - break; - printf(" [ 0x%x, %s ],\n", - retaddr, - res ? JSONString(res->Unresolve(retaddr)).c_str() : "\"\""); - } - printf("],\n"); - pos += (options_.stack_unwind_depth() * 4); - } - - - EventRecordType rt = static_cast(IntAt(pos)); - pos += 4; - - switch (rt) { - case EVENT_TYPE_LDR: - { - printf("'eventtype': 'EVENT_TYPE_LDR',\n"); - std::string str(&buf_[pos], kLdrBufSize); - str = str.substr(0, str.find('\0')); - printf("'ldrinfo': %s,\n", JSONString(str).c_str()); - pos += kLdrBufSize; - break; - } - case EVENT_TYPE_CREATETHREAD: - { - printf("'eventtype': 'EVENT_TYPE_CREATETHREAD',\n" - "'eventid': 0x%x,\n" - "'startaddr': 0x%x,\n", - IntAt(pos), IntAt(pos+4)); - pos += 8; - break; - } - case EVENT_TYPE_THREADBEGIN: - { - printf("'eventtype': 'EVENT_TYPE_THREADBEGIN',\n" - "'parenteventid': 0x%x,\n" - "'startaddr': 0x%x,\n", - IntAt(pos), IntAt(pos+4)); - pos += 8; - break; - } - case EVENT_TYPE_THREADNAME: - { - std::string str(&buf_[pos], kThreadNameBufSize); - str = str.substr(0, str.find('\0')); - printf("'eventtype': 'EVENT_TYPE_THREADNAME',\n" - "'threadname': %s,\n", - JSONString(str).c_str()); - pos += kThreadNameBufSize; - break; - } - case EVENT_TYPE_PROCESSEXIT: - { - printf("'eventtype': 'EVENT_TYPE_PROCESSEXIT',\n"); - break; - } - case EVENT_TYPE_THREADEXIT: - { - printf("'eventtype': 'EVENT_TYPE_THREADEXIT',\n"); - break; - } - case EVENT_TYPE_ALLOCHEAP: - { - printf("'eventtype': 'EVENT_TYPE_ALLOCHEAP',\n" - "'heaphandle': 0x%x,\n" - "'heapflags': 0x%x,\n" - "'heapsize': %d,\n", - IntAt(pos), IntAt(pos+4), IntAt(pos+8)); - pos += 12; - break; - } - case EVENT_TYPE_FREEHEAP: - { - printf("'eventtype': 'EVENT_TYPE_FREEHEAP',\n" - "'heaphandle': 0x%x,\n" - "'heapflags': 0x%x,\n" - "'heapptr': %d,\n", - IntAt(pos), IntAt(pos+4), IntAt(pos+8)); - pos += 12; - break; - } - case EVENT_TYPE_SYSCALL: - { - int syscall = IntAt(pos); - printf("'eventtype': 'EVENT_TYPE_SYSCALL',\n" - "'syscall': 0x%x,\n", syscall); - pos += 16; - - printf("'syscallargs': [\n"); - for (int i = 0; i < 3; ++i) { - printf(" 0x%x,\n", IntAt(pos)); - pos += 4; - } - printf("],\n"); - - printf("'retval': 0x%x,\n" - "'done': %f,\n", - IntAt(pos), rdn->MsFromStart(0, Int64At(pos+4))); - pos += 12; - - if (syscalls.count(syscall) == 1) { - std::string sname = syscalls[syscall]; - printf("'syscallname': %s,\n", - JSONString(sname).c_str()); - // Mark system calls that we should consider "waiting" system - // calls, where we are not actually active. - if (sname.find("WaitFor") != std::string::npos || - sname.find("RemoveIoCompletion") != std::string::npos) { - printf("'waiting': 1,\n"); - } - } - break; - } - case EVENT_TYPE_ENTER_CS: - { - printf("'eventtype': 'EVENT_TYPE_ENTER_CS',\n" - "'critical_section': 0x%x,\n", IntAt(pos)); - pos += 4; - break; - } - case EVENT_TYPE_TRYENTER_CS: - { - printf("'eventtype': 'EVENT_TYPE_TRYENTER_CS',\n" - "'critical_section': 0x%x,\n" - "'retval': 0x%x,\n", - IntAt(pos), IntAt(pos+4)); - pos += 8; - break; - } - case EVENT_TYPE_LEAVE_CS: - { - printf("'eventtype': 'EVENT_TYPE_LEAVE_CS',\n" - "'critical_section': 0x%x,\n", IntAt(pos)); - pos += 4; - break; - } - case EVENT_TYPE_APC: - { - int func_addr = IntAt(pos); - printf("'eventtype': 'EVENT_TYPE_APC',\n" - "'func_addr': 0x%x,\n" - "'func_addr_name': %s,\n" - "'ret_addr': 0x%x,\n" - "'done': %f,\n", - func_addr, - res ? JSONString(res->Unresolve(func_addr)).c_str() : "\"\"", - IntAt(pos+4), rdn->MsFromStart(0, Int64At(pos+8))); - pos += 16; - break; - } - default: - NOTREACHED("Unknown event type: %d", rt); - break; - } - printf("},\n"); - } - printf("]);"); - } - - int IntAt(int pos) { return *reinterpret_cast(&buf_[pos]); } - __int64 Int64At(int pos) { return *reinterpret_cast<__int64*>(&buf_[pos]); } - - - private: - // Handle the process we install into or read back from. - HANDLE proc_; - // The address where we will keep our playground in the remote process. - char* remote_addr_; - // Lookup addresses from symbol names for ntdll.dll. - SymResolver resolver_; - Options options_; - // A local copy of the playground data, we copy it into the remote process. - char buf_[kPlaygroundSize]; -}; - - -int main(int argc, char** argv) { - std::string command_line; - bool use_symbols = false; - bool attaching = false; - bool launched = false; - bool manual_quit = false; - - Playground::Options options; - - PROCESS_INFORMATION info = {0}; - - argc--; argv++; - - while (argc > 0) { - if (std::string("--symbols") == argv[0]) { - use_symbols = true; - } else if (std::string("--vista") == argv[0]) { - options.set_vista(true); - } else if (std::string("--log-heap") == argv[0]) { - options.set_log_heap(true); - } else if (std::string("--log-lock") == argv[0]) { - options.set_log_lock(true); - } else if (std::string("--manual-quit") == argv[0]) { - manual_quit = true; - } else if (argc >= 2 && std::string("--unwind") == argv[0]) { - options.set_stack_unwind_depth(atoi(argv[1])); - argc--; argv++; - } else if (argc >= 2 && !launched && std::string("--attach") == argv[0]) { - attaching = true; - info.hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, atoi(argv[1])); - launched = true; - argc--; argv++; - } else if (!launched) { - STARTUPINFOA start_info = {0}; - start_info.cb = sizeof(start_info); - - if (!CreateProcessA(NULL, - argv[0], - NULL, - NULL, - FALSE, - CREATE_SUSPENDED, - NULL, - NULL, - &start_info, - &info)) { - NOTREACHED("Failed to launch \"%s\": %d\n", argv[0], GetLastError()); - return 1; - } - launched = true; - } else { - NOTREACHED("error parsing command line."); - } - argc--; argv++; - } - - if (!launched) { - printf("usage: traceline.exe \"app.exe my arguments\"\n" - " --attach 123: buggy support for attaching to a process\n" - " --unwind 16: unwind the stack to the specified max depth\n" - " --symbols: use symbols for stacktraces\n" - " --log-heap: log heap operations (alloc / free).\n" - " --log-lock: log lock (critical section) operations.\n"); - return 1; - } - - - HANDLE exiting = CreateEvent(NULL, FALSE, FALSE, NULL); - HANDLE exited = CreateEvent(NULL, FALSE, FALSE, NULL); - - // The playground object is big (32MB), dynamically alloc. - Playground* pg = new Playground(info.hProcess, options); - - pg->AllocateInRemote(); - pg->Patch(); - pg->PatchExit(exiting, exited); - pg->CopyToRemote(); - - RDTSCNormalizer rdn; - rdn.Start(); - - if (!attaching) - ResumeThread(info.hThread); - - // Wait until we have been notified that it's exiting. - if (manual_quit) { - fprintf(stderr, "Press enter when you want stop tracing and collect.\n"); - fflush(stderr); - getchar(); - } else { - HANDLE whs[] = {exiting, info.hProcess}; - if (WaitForMultipleObjects(2, whs, FALSE, INFINITE) != WAIT_OBJECT_0) { - NOTREACHED("Failed to correctly capture process shutdown."); - } - } - - pg->CopyFromRemote(); - - if (use_symbols) { - // Break in and get the symbols... - SymResolver res(NULL, info.hProcess); - pg->DumpJSON(&rdn, &res); - } else { - pg->DumpJSON(&rdn, NULL); - } - - // Notify that it can exit now, we are done. - SetEvent(exited); - - CloseHandle(info.hProcess); - CloseHandle(info.hThread); - - delete pg; -} diff --git a/chromium/tools/traceline/traceline/rdtsc.h b/chromium/tools/traceline/traceline/rdtsc.h deleted file mode 100644 index 7c3cb1a9676..00000000000 --- a/chromium/tools/traceline/traceline/rdtsc.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef TRACELINE_RDTSC_H_ -#define TRACELINE_RDTSC_H_ - -#include -#include - -#include - -#include "logging.h" - -class RDTSCNormalizer { - public: - RDTSCNormalizer() { } - ~RDTSCNormalizer() { } - - void Start() { - LARGE_INTEGER freq, now; - if (QueryPerformanceFrequency(&freq) == 0) { - NOTREACHED(""); - } - freq_ = freq.QuadPart; - - if (QueryPerformanceCounter(&now) == 0) { - NOTREACHED(""); - } - start_ = now.QuadPart; - } - - // Calculate the time from start for a given processor. - double MsFromStart(void* procid, __int64 stamp) { - return (stamp - start_) / (freq_ / 1000.0); - } - - private: - __int64 freq_; - __int64 start_; -}; - -#endif // TRACELINE_RDTSC_H_ diff --git a/chromium/tools/traceline/traceline/scripts/__init__.py b/chromium/tools/traceline/traceline/scripts/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/chromium/tools/traceline/traceline/scripts/alloc.py b/chromium/tools/traceline/traceline/scripts/alloc.py deleted file mode 100755 index ee4af220d59..00000000000 --- a/chromium/tools/traceline/traceline/scripts/alloc.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import sys - -from syscalls import syscalls - - -def parseEvents(z): - calls = { } - for e in z: - if e['eventtype'] == 'EVENT_TYPE_SYSCALL' and e['syscall'] == 17: - delta = e['done'] - e['ms'] - tid = e['thread'] - ms = e['ms'] - print '%f - %f - %x' % ( - delta, ms, tid) - - -def main(): - execfile(sys.argv[1]) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/traceline/traceline/scripts/crit_sec.js b/chromium/tools/traceline/traceline/scripts/crit_sec.js deleted file mode 100644 index 906bba10f0a..00000000000 --- a/chromium/tools/traceline/traceline/scripts/crit_sec.js +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// You should run this with v8, like v8_shell alloc.js datafile.json - -function toHex(num) { - var str = ""; - var table = "0123456789abcdef"; - while (num != 0) { - str = table.charAt(num & 0xf) + str; - num >>= 4; - } - return str; -} - -function parseEvents(z) { - var crits = { } - var calls = { } - - for (var i = 0, il = z.length; i < il; ++i) { - var e = z[i]; - - if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS' || - e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS' || - e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') { - cs = e['critical_section']; - if (!(cs in crits)) { - crits[cs] = [ ]; - } - crits[cs].push(e); - } - } - - // Verify that the locks get unlocked, and operations stay on the same thread. - for (var key in crits) { - var cs = key; - var es = crits[key]; - - var tid_stack = [ ]; - for (var j = 0, jl = es.length; j < jl; ++j) { - var e = es[j]; - if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS') { - tid_stack.push(e); - } else if (e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS') { - if (e['retval'] != 0) - tid_stack.push(e); - } else if (e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') { - if (tid_stack.length == 0) { - print('fail ' + e); - } - var tid = tid_stack.pop() - if (tid['thread'] != e['thread']) { - print('fail ' + tid); - } - } - } - } - - // Look for long-held / contended locks. We can't really know it is - // contended without looking if anyone is waiting on the embedded event... - // Just look for locks are are held a long time? Not so good... - for (var key in crits) { - var cs = key; - var es = crits[key]; - - var tid_stack = [ ]; - for (var j = 0, jl = es.length; j < jl; ++j) { - var e = es[j]; - if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS') { - tid_stack.push(e); - } else if (e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS') { - if (e['retval'] != 0) - tid_stack.push(e); - } else if (e['eventtype'] == 'EVENT_TYPE_LEAVE_CS') { - if (tid_stack.length == 0) { - print('fail ' + e); - } - var tid = tid_stack.pop(); - var dur = e['ms'] - tid['ms']; - if (dur > 0.1) { - print('Lock: 0x' + toHex(cs) + ' for ' + dur + ' at: ' + e['ms']); - } - } - } - } -} diff --git a/chromium/tools/traceline/traceline/scripts/crit_sec.py b/chromium/tools/traceline/traceline/scripts/crit_sec.py deleted file mode 100755 index ee710bd2032..00000000000 --- a/chromium/tools/traceline/traceline/scripts/crit_sec.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import sys -import os - -from syscalls import syscalls - - -def parseEvents(z): - crits = { } - calls = { } - for e in z: - if (e['eventtype'] == 'EVENT_TYPE_ENTER_CS' or - e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS' or - e['eventtype'] == 'EVENT_TYPE_LEAVE_CS'): - cs = e['critical_section'] - if not crits.has_key(cs): - crits[cs] = [ ] - crits[cs].append(e) - -# for cs, es in crits.iteritems(): -# print 'cs: 0x%08x' % cs -# for e in es: -# print ' 0x%08x - %s - %f' % (e['thread'], e['eventtype'], e['ms']) - - for cs, es in crits.iteritems(): - print 'cs: 0x%08x' % cs - - tid_stack = [ ] - for e in es: - if e['eventtype'] == 'EVENT_TYPE_ENTER_CS': - tid_stack.append(e) - elif e['eventtype'] == 'EVENT_TYPE_TRYENTER_CS': - if e['retval'] != 0: - tid_stack.append(e) - elif e['eventtype'] == 'EVENT_TYPE_LEAVE_CS': - if not tid_stack: - raise repr(e) - tid = tid_stack.pop() - if tid['thread'] != e['thread']: - raise repr(tid) + '--' + repr(e) - - # Critical section left locked? - if tid_stack: - #raise repr(tid_stack) - pass - - -def main(): - execfile(sys.argv[1]) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/traceline/traceline/scripts/filter_short.py b/chromium/tools/traceline/traceline/scripts/filter_short.py deleted file mode 100755 index 1b73bf96af0..00000000000 --- a/chromium/tools/traceline/traceline/scripts/filter_short.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Takes an input JSON, and filters out all system call events that -took less than 0.2ms. - -This helps trim down the JSON data to only the most interesting / time critical -events. -""" - -import sys -import re - - -def parseEvents(z): - print 'parseEvents([' - for e in z: - if e.has_key('ms') and e.has_key('done'): - dur = e['done'] - e['ms'] - if dur < 0.2: - continue - # Ugly regex to remove the L suffix on large python numbers. - print '%s,' % re.sub('([0-9])L\\b', '\\1', str(e)) - print '])' - - -def main(): - execfile(sys.argv[1]) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/traceline/traceline/scripts/filter_split.sh b/chromium/tools/traceline/traceline/scripts/filter_split.sh deleted file mode 100755 index 876488e3111..00000000000 --- a/chromium/tools/traceline/traceline/scripts/filter_split.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Runs filter_short on the individual splits of a json file, and puts -# everything back together into a single output json. This is useful when you -# want to filter a large json file that would otherwise OOM Python. - -echo "parseEvents([" > totalsplit -for f in split.*; do - ./scripts/filter_short.py "$f" | tail -n +2 | head -n -1 >> totalsplit -done -echo "]);" >> totalsplit diff --git a/chromium/tools/traceline/traceline/scripts/heap.js b/chromium/tools/traceline/traceline/scripts/heap.js deleted file mode 100644 index 9025ac3d95f..00000000000 --- a/chromium/tools/traceline/traceline/scripts/heap.js +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// You should run this with v8, like v8_shell alloc.js datafile.json - -function toHex(num) { - var str = ""; - var table = "0123456789abcdef"; - while (num != 0) { - str = table.charAt(num & 0xf) + str; - num >>= 4; - } - return str; -} - -function dump(obj) { - for (var key in obj) { - print('key: ' + key); - print(' ' + obj[key]); - } -} - -function TopN(n) { - this.n = n; - this.min = 0; - this.sorted = [ ]; -} - -TopN.prototype.add = -function(num, data) { - if (num < this.min) - return; - - this.sorted.push([num, data]); - this.sorted.sort(function(a, b) { return b[0] - a[0] }); - if (this.sorted.length > this.n) - this.sorted.pop(); - - this.min = this.sorted[this.sorted.lenth - 1]; -}; - -TopN.prototype.datas = -function() { - var datas = [ ]; - for (var i = 0, il = this.sorted.length; i < il; ++i) { - datas.push(this.sorted[i][1]); - } - return datas; -}; - -function parseEvents(z) { - var topper = new TopN(1000); - - // Find the largest allocation. - for (var i = 0, il = z.length; i < il; ++i) { - var e = z[i]; - - if (e['eventtype'] == 'EVENT_TYPE_ALLOCHEAP') { - var size = e['heapsize']; - topper.add(e['heapsize'], e); - } - } - - var datas = topper.datas(); - for (var i = 0, il = datas.length; i < il; ++i) { - dump(datas[i]); - } -} diff --git a/chromium/tools/traceline/traceline/scripts/scstats.py b/chromium/tools/traceline/traceline/scripts/scstats.py deleted file mode 100755 index e2f28dc94a1..00000000000 --- a/chromium/tools/traceline/traceline/scripts/scstats.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import sys - -from syscalls import syscalls - - -def parseEvents(z): - calls = { } - for e in z: - if e['eventtype'] == 'EVENT_TYPE_SYSCALL' and e['done'] > 0: - delta = e['done'] - e['ms'] - syscall = e['syscall'] - tid = e['thread'] - ms = e['ms'] - calls[syscall] = calls.get(syscall, 0) + delta - print '%f - %f - %x - %d %s' % ( - delta, ms, tid, syscall, syscalls.get(syscall, 'unknown')) - - #for syscall, delta in calls.items(): - # print '%f - %d %s' % (delta, syscall, syscalls.get(syscall, 'unknown')) - - -def main(): - execfile(sys.argv[1]) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/traceline/traceline/scripts/split.py b/chromium/tools/traceline/traceline/scripts/split.py deleted file mode 100755 index 6f20e0457e4..00000000000 --- a/chromium/tools/traceline/traceline/scripts/split.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Splits a single json file (read from stdin) into separate files of 40k -records, named split.X. -""" - -import sys - - -def main(): - filecount = 0 - count = 0 - f = open('split.0', 'wb') - for l in sys.stdin: - if l == "},\r\n": - count += 1 - if count == 40000: - f.write("}]);\r\n") - count = 0 - filecount += 1 - f = open('split.%d' % filecount, 'wb') - f.write("parseEvents([\r\n") - continue - f.write(l) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/traceline/traceline/scripts/syscalls.py b/chromium/tools/traceline/traceline/scripts/syscalls.py deleted file mode 100644 index 6800b45c128..00000000000 --- a/chromium/tools/traceline/traceline/scripts/syscalls.py +++ /dev/null @@ -1,942 +0,0 @@ -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -syscalls = { -0: "ntdll.dll!NtAcceptConnectPort", -1: "ntdll.dll!NtAccessCheck", -2: "ntdll.dll!ZwAccessCheckAndAuditAlarm", -3: "ntdll.dll!NtAccessCheckByType", -4: "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm", -5: "ntdll.dll!NtAccessCheckByTypeResultList", -6: "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm", -7: "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle", -8: "ntdll.dll!NtAddAtom", -9: "ntdll.dll!ZwAddBootEntry", -10: "ntdll.dll!ZwAdjustGroupsToken", -11: "ntdll.dll!ZwAdjustPrivilegesToken", -12: "ntdll.dll!NtAlertResumeThread", -13: "ntdll.dll!NtAlertThread", -14: "ntdll.dll!ZwAllocateLocallyUniqueId", -15: "ntdll.dll!NtAllocateUserPhysicalPages", -16: "ntdll.dll!NtAllocateUuids", -17: "ntdll.dll!NtAllocateVirtualMemory", -18: "ntdll.dll!ZwAreMappedFilesTheSame", -19: "ntdll.dll!ZwAssignProcessToJobObject", -20: "ntdll.dll!ZwCallbackReturn", -21: "ntdll.dll!NtCancelDeviceWakeupRequest", -22: "ntdll.dll!ZwCancelIoFile", -23: "ntdll.dll!ZwCancelTimer", -24: "ntdll.dll!NtClearEvent", -25: "ntdll.dll!NtClose", -26: "ntdll.dll!ZwCloseObjectAuditAlarm", -27: "ntdll.dll!NtCompactKeys", -28: "ntdll.dll!ZwCompareTokens", -29: "ntdll.dll!NtCompleteConnectPort", -30: "ntdll.dll!ZwCompressKey", -31: "ntdll.dll!NtConnectPort", -32: "ntdll.dll!ZwContinue", -33: "ntdll.dll!ZwCreateDebugObject", -34: "ntdll.dll!ZwCreateDirectoryObject", -35: "ntdll.dll!NtCreateEvent", -36: "ntdll.dll!NtCreateEventPair", -37: "ntdll.dll!NtCreateFile", -38: "ntdll.dll!NtCreateIoCompletion", -39: "ntdll.dll!ZwCreateJobObject", -40: "ntdll.dll!NtCreateJobSet", -41: "ntdll.dll!ZwCreateKey", -42: "ntdll.dll!ZwCreateMailslotFile", -43: "ntdll.dll!ZwCreateMutant", -44: "ntdll.dll!ZwCreateNamedPipeFile", -45: "ntdll.dll!NtCreatePagingFile", -46: "ntdll.dll!ZwCreatePort", -47: "ntdll.dll!ZwCreateProcess", -48: "ntdll.dll!ZwCreateProcessEx", -49: "ntdll.dll!ZwCreateProfile", -50: "ntdll.dll!NtCreateSection", -51: "ntdll.dll!NtCreateSemaphore", -52: "ntdll.dll!ZwCreateSymbolicLinkObject", -53: "ntdll.dll!NtCreateThread", -54: "ntdll.dll!ZwCreateTimer", -55: "ntdll.dll!NtCreateToken", -56: "ntdll.dll!ZwCreateWaitablePort", -57: "ntdll.dll!NtDebugActiveProcess", -58: "ntdll.dll!ZwDebugContinue", -59: "ntdll.dll!ZwDelayExecution", -60: "ntdll.dll!ZwDeleteAtom", -61: "ntdll.dll!NtDeleteBootEntry", -62: "ntdll.dll!NtDeleteFile", -63: "ntdll.dll!ZwDeleteKey", -64: "ntdll.dll!NtDeleteObjectAuditAlarm", -65: "ntdll.dll!NtDeleteValueKey", -66: "ntdll.dll!ZwDeviceIoControlFile", -67: "ntdll.dll!NtDisplayString", -68: "ntdll.dll!ZwDuplicateObject", -69: "ntdll.dll!NtDuplicateToken", -70: "ntdll.dll!ZwEnumerateBootEntries", -71: "ntdll.dll!ZwEnumerateKey", -72: "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx", -73: "ntdll.dll!NtEnumerateValueKey", -74: "ntdll.dll!ZwExtendSection", -75: "ntdll.dll!NtFilterToken", -76: "ntdll.dll!NtFindAtom", -77: "ntdll.dll!ZwFlushBuffersFile", -78: "ntdll.dll!ZwFlushInstructionCache", -79: "ntdll.dll!NtFlushKey", -80: "ntdll.dll!ZwFlushVirtualMemory", -81: "ntdll.dll!NtFlushWriteBuffer", -82: "ntdll.dll!NtFreeUserPhysicalPages", -83: "ntdll.dll!NtFreeVirtualMemory", -84: "ntdll.dll!NtFsControlFile", -85: "ntdll.dll!NtGetContextThread", -86: "ntdll.dll!NtGetDevicePowerState", -87: "ntdll.dll!ZwGetPlugPlayEvent", -88: "ntdll.dll!NtGetWriteWatch", -89: "ntdll.dll!NtImpersonateAnonymousToken", -90: "ntdll.dll!ZwImpersonateClientOfPort", -91: "ntdll.dll!ZwImpersonateThread", -92: "ntdll.dll!ZwInitializeRegistry", -93: "ntdll.dll!NtInitiatePowerAction", -94: "ntdll.dll!ZwIsProcessInJob", -95: "ntdll.dll!NtIsSystemResumeAutomatic", -96: "ntdll.dll!ZwListenPort", -97: "ntdll.dll!NtLoadDriver", -98: "ntdll.dll!NtLoadKey", -99: "ntdll.dll!NtLoadKey2", -100: "ntdll.dll!NtLockFile", -101: "ntdll.dll!ZwLockProductActivationKeys", -102: "ntdll.dll!NtLockRegistryKey", -103: "ntdll.dll!ZwLockVirtualMemory", -104: "ntdll.dll!ZwMakePermanentObject", -105: "ntdll.dll!NtMakeTemporaryObject", -106: "ntdll.dll!NtMapUserPhysicalPages", -107: "ntdll.dll!ZwMapUserPhysicalPagesScatter", -108: "ntdll.dll!ZwMapViewOfSection", -109: "ntdll.dll!NtModifyBootEntry", -110: "ntdll.dll!NtNotifyChangeDirectoryFile", -111: "ntdll.dll!NtNotifyChangeKey", -112: "ntdll.dll!NtNotifyChangeMultipleKeys", -113: "ntdll.dll!ZwOpenDirectoryObject", -114: "ntdll.dll!NtOpenEvent", -115: "ntdll.dll!NtOpenEventPair", -116: "ntdll.dll!NtOpenFile", -117: "ntdll.dll!ZwOpenIoCompletion", -118: "ntdll.dll!ZwOpenJobObject", -119: "ntdll.dll!ZwOpenKey", -120: "ntdll.dll!NtOpenMutant", -121: "ntdll.dll!ZwOpenObjectAuditAlarm", -122: "ntdll.dll!ZwOpenProcess", -123: "ntdll.dll!ZwOpenProcessToken", -124: "ntdll.dll!ZwOpenProcessTokenEx", -125: "ntdll.dll!NtOpenSection", -126: "ntdll.dll!NtOpenSemaphore", -127: "ntdll.dll!NtOpenSymbolicLinkObject", -128: "ntdll.dll!ZwOpenThread", -129: "ntdll.dll!NtOpenThreadToken", -130: "ntdll.dll!NtOpenThreadTokenEx", -131: "ntdll.dll!ZwOpenTimer", -132: "ntdll.dll!NtPlugPlayControl", -133: "ntdll.dll!ZwPowerInformation", -134: "ntdll.dll!ZwPrivilegeCheck", -135: "ntdll.dll!ZwPrivilegeObjectAuditAlarm", -136: "ntdll.dll!NtPrivilegedServiceAuditAlarm", -137: "ntdll.dll!ZwProtectVirtualMemory", -138: "ntdll.dll!ZwPulseEvent", -139: "ntdll.dll!ZwQueryAttributesFile", -140: "ntdll.dll!ZwQueryBootEntryOrder", -141: "ntdll.dll!ZwQueryBootOptions", -142: "ntdll.dll!NtQueryDebugFilterState", -143: "ntdll.dll!NtQueryDefaultLocale", -144: "ntdll.dll!ZwQueryDefaultUILanguage", -145: "ntdll.dll!ZwQueryDirectoryFile", -146: "ntdll.dll!ZwQueryDirectoryObject", -147: "ntdll.dll!ZwQueryEaFile", -148: "ntdll.dll!NtQueryEvent", -149: "ntdll.dll!ZwQueryFullAttributesFile", -150: "ntdll.dll!NtQueryInformationAtom", -151: "ntdll.dll!ZwQueryInformationFile", -152: "ntdll.dll!ZwQueryInformationJobObject", -153: "ntdll.dll!ZwQueryInformationPort", -154: "ntdll.dll!ZwQueryInformationProcess", -155: "ntdll.dll!NtQueryInformationThread", -156: "ntdll.dll!ZwQueryInformationToken", -157: "ntdll.dll!NtQueryInstallUILanguage", -158: "ntdll.dll!NtQueryIntervalProfile", -159: "ntdll.dll!NtQueryIoCompletion", -160: "ntdll.dll!ZwQueryKey", -161: "ntdll.dll!NtQueryMultipleValueKey", -162: "ntdll.dll!NtQueryMutant", -163: "ntdll.dll!NtQueryObject", -164: "ntdll.dll!NtQueryOpenSubKeys", -165: "ntdll.dll!NtQueryPerformanceCounter", -166: "ntdll.dll!ZwQueryQuotaInformationFile", -167: "ntdll.dll!ZwQuerySection", -168: "ntdll.dll!NtQuerySecurityObject", -169: "ntdll.dll!ZwQuerySemaphore", -170: "ntdll.dll!ZwQuerySymbolicLinkObject", -171: "ntdll.dll!ZwQuerySystemEnvironmentValue", -172: "ntdll.dll!ZwQuerySystemEnvironmentValueEx", -173: "ntdll.dll!NtQuerySystemInformation", -174: "ntdll.dll!NtQuerySystemTime", -175: "ntdll.dll!ZwQueryTimer", -176: "ntdll.dll!NtQueryTimerResolution", -177: "ntdll.dll!ZwQueryValueKey", -178: "ntdll.dll!NtQueryVirtualMemory", -179: "ntdll.dll!NtQueryVolumeInformationFile", -180: "ntdll.dll!NtQueueApcThread", -181: "ntdll.dll!ZwRaiseException", -182: "ntdll.dll!ZwRaiseHardError", -183: "ntdll.dll!NtReadFile", -184: "ntdll.dll!NtReadFileScatter", -185: "ntdll.dll!ZwReadRequestData", -186: "ntdll.dll!NtReadVirtualMemory", -187: "ntdll.dll!ZwRegisterThreadTerminatePort", -188: "ntdll.dll!ZwReleaseMutant", -189: "ntdll.dll!NtReleaseSemaphore", -190: "ntdll.dll!ZwRemoveIoCompletion", -191: "ntdll.dll!ZwRemoveProcessDebug", -192: "ntdll.dll!ZwRenameKey", -193: "ntdll.dll!ZwReplaceKey", -194: "ntdll.dll!ZwReplyPort", -195: "ntdll.dll!NtReplyWaitReceivePort", -196: "ntdll.dll!NtReplyWaitReceivePortEx", -197: "ntdll.dll!NtReplyWaitReplyPort", -198: "ntdll.dll!ZwRequestDeviceWakeup", -199: "ntdll.dll!ZwRequestPort", -200: "ntdll.dll!NtRequestWaitReplyPort", -201: "ntdll.dll!ZwRequestWakeupLatency", -202: "ntdll.dll!NtResetEvent", -203: "ntdll.dll!ZwResetWriteWatch", -204: "ntdll.dll!NtRestoreKey", -205: "ntdll.dll!ZwResumeProcess", -206: "ntdll.dll!ZwResumeThread", -207: "ntdll.dll!NtSaveKey", -208: "ntdll.dll!NtSaveKeyEx", -209: "ntdll.dll!NtSaveMergedKeys", -210: "ntdll.dll!NtSecureConnectPort", -211: "ntdll.dll!ZwSetBootEntryOrder", -212: "ntdll.dll!ZwSetBootOptions", -213: "ntdll.dll!ZwSetContextThread", -214: "ntdll.dll!NtSetDebugFilterState", -215: "ntdll.dll!NtSetDefaultHardErrorPort", -216: "ntdll.dll!NtSetDefaultLocale", -217: "ntdll.dll!ZwSetDefaultUILanguage", -218: "ntdll.dll!ZwSetEaFile", -219: "ntdll.dll!NtSetEvent", -220: "ntdll.dll!NtSetEventBoostPriority", -221: "ntdll.dll!NtSetHighEventPair", -222: "ntdll.dll!NtSetHighWaitLowEventPair", -223: "ntdll.dll!ZwSetInformationDebugObject", -224: "ntdll.dll!ZwSetInformationFile", -225: "ntdll.dll!ZwSetInformationJobObject", -226: "ntdll.dll!ZwSetInformationKey", -227: "ntdll.dll!ZwSetInformationObject", -228: "ntdll.dll!ZwSetInformationProcess", -229: "ntdll.dll!ZwSetInformationThread", -230: "ntdll.dll!ZwSetInformationToken", -231: "ntdll.dll!NtSetIntervalProfile", -232: "ntdll.dll!NtSetIoCompletion", -233: "ntdll.dll!ZwSetLdtEntries", -234: "ntdll.dll!ZwSetLowEventPair", -235: "ntdll.dll!ZwSetLowWaitHighEventPair", -236: "ntdll.dll!ZwSetQuotaInformationFile", -237: "ntdll.dll!NtSetSecurityObject", -238: "ntdll.dll!ZwSetSystemEnvironmentValue", -239: "ntdll.dll!ZwSetSystemEnvironmentValueEx", -240: "ntdll.dll!ZwSetSystemInformation", -241: "ntdll.dll!ZwSetSystemPowerState", -242: "ntdll.dll!ZwSetSystemTime", -243: "ntdll.dll!ZwSetThreadExecutionState", -244: "ntdll.dll!ZwSetTimer", -245: "ntdll.dll!NtSetTimerResolution", -246: "ntdll.dll!ZwSetUuidSeed", -247: "ntdll.dll!ZwSetValueKey", -248: "ntdll.dll!NtSetVolumeInformationFile", -249: "ntdll.dll!ZwShutdownSystem", -250: "ntdll.dll!ZwSignalAndWaitForSingleObject", -251: "ntdll.dll!NtStartProfile", -252: "ntdll.dll!ZwStopProfile", -253: "ntdll.dll!ZwSuspendProcess", -254: "ntdll.dll!ZwSuspendThread", -255: "ntdll.dll!NtSystemDebugControl", -256: "ntdll.dll!ZwTerminateJobObject", -257: "ntdll.dll!ZwTerminateProcess", -258: "ntdll.dll!ZwTerminateThread", -259: "ntdll.dll!NtTestAlert", -260: "ntdll.dll!NtTraceEvent", -261: "ntdll.dll!NtTranslateFilePath", -262: "ntdll.dll!ZwUnloadDriver", -263: "ntdll.dll!NtUnloadKey", -264: "ntdll.dll!ZwUnloadKeyEx", -265: "ntdll.dll!ZwUnlockFile", -266: "ntdll.dll!NtUnlockVirtualMemory", -267: "ntdll.dll!NtUnmapViewOfSection", -268: "ntdll.dll!NtVdmControl", -269: "ntdll.dll!NtWaitForDebugEvent", -270: "ntdll.dll!NtWaitForMultipleObjects", -271: "ntdll.dll!ZwWaitForSingleObject", -272: "ntdll.dll!ZwWaitHighEventPair", -273: "ntdll.dll!NtWaitLowEventPair", -274: "ntdll.dll!NtWriteFile", -275: "ntdll.dll!NtWriteFileGather", -276: "ntdll.dll!NtWriteRequestData", -277: "ntdll.dll!NtWriteVirtualMemory", -278: "ntdll.dll!ZwYieldExecution", -279: "ntdll.dll!ZwCreateKeyedEvent", -280: "ntdll.dll!NtOpenKeyedEvent", -281: "ntdll.dll!NtReleaseKeyedEvent", -282: "ntdll.dll!NtWaitForKeyedEvent", -283: "ntdll.dll!ZwQueryPortInformationProcess", -4096: "gdi32.dll!NtGdiAbortDoc", -4097: "gdi32.dll!NtGdiAbortPath", -4098: "gdi32.dll!NtGdiAddFontResourceW", -4099: "gdi32.dll!NtGdiAddRemoteFontToDC", -4100: "gdi32.dll!NtGdiAddFontMemResourceEx", -4101: "gdi32.dll!NtGdiRemoveMergeFont", -4102: "gdi32.dll!NtGdiAddRemoteMMInstanceToDC", -4103: "gdi32.dll!NtGdiAlphaBlend", -4104: "gdi32.dll!NtGdiAngleArc", -4105: "gdi32.dll!NtGdiAnyLinkedFonts", -4106: "gdi32.dll!NtGdiFontIsLinked", -4107: "gdi32.dll!NtGdiArcInternal", -4108: "gdi32.dll!NtGdiBeginPath", -4109: "gdi32.dll!NtGdiBitBlt", -4110: "gdi32.dll!NtGdiCancelDC", -4111: "gdi32.dll!NtGdiCheckBitmapBits", -4112: "gdi32.dll!NtGdiCloseFigure", -4113: "gdi32.dll!NtGdiClearBitmapAttributes", -4114: "gdi32.dll!NtGdiClearBrushAttributes", -4115: "gdi32.dll!NtGdiColorCorrectPalette", -4116: "gdi32.dll!NtGdiCombineRgn", -4117: "gdi32.dll!CombineTransform", -4118: "gdi32.dll!NtGdiComputeXformCoefficients", -4119: "gdi32.dll!NtGdiConsoleTextOut", -4120: "gdi32.dll!NtGdiConvertMetafileRect", -4121: "gdi32.dll!NtGdiCreateBitmap", -4122: "gdi32.dll!NtGdiCreateClientObj", -4123: "gdi32.dll!NtGdiCreateColorSpace", -4124: "gdi32.dll!NtGdiCreateColorTransform", -4125: "gdi32.dll!NtGdiCreateCompatibleBitmap", -4126: "gdi32.dll!NtGdiCreateCompatibleDC", -4127: "gdi32.dll!NtGdiCreateDIBBrush", -4128: "gdi32.dll!NtGdiCreateDIBitmapInternal", -4129: "gdi32.dll!NtGdiCreateDIBSection", -4130: "gdi32.dll!NtGdiCreateEllipticRgn", -4131: "gdi32.dll!NtGdiCreateHalftonePalette", -4132: "gdi32.dll!NtGdiCreateHatchBrushInternal", -4133: "gdi32.dll!NtGdiCreateMetafileDC", -4134: "gdi32.dll!NtGdiCreatePaletteInternal", -4135: "gdi32.dll!NtGdiCreatePatternBrushInternal", -4136: "gdi32.dll!CreatePen", -4137: "gdi32.dll!NtGdiCreateRectRgn", -4138: "gdi32.dll!CreateRoundRectRgn", -4139: "gdi32.dll!NtGdiCreateServerMetaFile", -4140: "gdi32.dll!NtGdiCreateSolidBrush", -4141: "gdi32.dll!NtGdiD3dContextCreate", -4142: "gdi32.dll!NtGdiD3dContextDestroy", -4143: "gdi32.dll!NtGdiD3dContextDestroyAll", -4144: "gdi32.dll!NtGdiD3dValidateTextureStageState", -4145: "gdi32.dll!NtGdiD3dDrawPrimitives2", -4146: "gdi32.dll!NtGdiDdGetDriverState", -4147: "gdi32.dll!NtGdiDdAddAttachedSurface", -4148: "gdi32.dll!NtGdiDdAlphaBlt", -4149: "gdi32.dll!NtGdiDdAttachSurface", -4150: "gdi32.dll!NtGdiDdBeginMoCompFrame", -4151: "gdi32.dll!NtGdiDdBlt", -4152: "gdi32.dll!NtGdiDdCanCreateSurface", -4153: "gdi32.dll!NtGdiDdCanCreateD3DBuffer", -4154: "gdi32.dll!NtGdiDdColorControl", -4155: "gdi32.dll!NtGdiDdCreateDirectDrawObject", -4156: "gdi32.dll!NtGdiDdCreateSurface", -4157: "gdi32.dll!NtGdiDdCreateD3DBuffer", -4158: "gdi32.dll!NtGdiDdCreateMoComp", -4159: "gdi32.dll!NtGdiDdCreateSurfaceObject", -4160: "gdi32.dll!NtGdiDdDeleteDirectDrawObject", -4161: "gdi32.dll!NtGdiDdDeleteSurfaceObject", -4162: "gdi32.dll!NtGdiDdDestroyMoComp", -4163: "gdi32.dll!NtGdiDdDestroySurface", -4164: "gdi32.dll!NtGdiDdDestroyD3DBuffer", -4165: "gdi32.dll!NtGdiDdEndMoCompFrame", -4166: "gdi32.dll!NtGdiDdFlip", -4167: "gdi32.dll!NtGdiDdFlipToGDISurface", -4168: "gdi32.dll!NtGdiDdGetAvailDriverMemory", -4169: "gdi32.dll!NtGdiDdGetBltStatus", -4170: "gdi32.dll!NtGdiDdGetDC", -4171: "gdi32.dll!NtGdiDdGetDriverInfo", -4172: "gdi32.dll!NtGdiDdGetDxHandle", -4173: "gdi32.dll!NtGdiDdGetFlipStatus", -4174: "gdi32.dll!NtGdiDdGetInternalMoCompInfo", -4175: "gdi32.dll!NtGdiDdGetMoCompBuffInfo", -4176: "gdi32.dll!NtGdiDdGetMoCompGuids", -4177: "gdi32.dll!NtGdiDdGetMoCompFormats", -4178: "gdi32.dll!NtGdiDdGetScanLine", -4179: "gdi32.dll!NtGdiDdLock", -4180: "gdi32.dll!NtGdiDdLockD3D", -4181: "gdi32.dll!NtGdiDdQueryDirectDrawObject", -4182: "gdi32.dll!NtGdiDdQueryMoCompStatus", -4183: "gdi32.dll!NtGdiDdReenableDirectDrawObject", -4184: "gdi32.dll!NtGdiDdReleaseDC", -4185: "gdi32.dll!NtGdiDdRenderMoComp", -4186: "gdi32.dll!NtGdiDdResetVisrgn", -4187: "gdi32.dll!NtGdiDdSetColorKey", -4188: "gdi32.dll!NtGdiDdSetExclusiveMode", -4189: "gdi32.dll!NtGdiDdSetGammaRamp", -4190: "gdi32.dll!NtGdiDdCreateSurfaceEx", -4191: "gdi32.dll!NtGdiDdSetOverlayPosition", -4192: "gdi32.dll!NtGdiDdUnattachSurface", -4193: "gdi32.dll!NtGdiDdUnlock", -4194: "gdi32.dll!NtGdiDdUnlockD3D", -4195: "gdi32.dll!NtGdiDdUpdateOverlay", -4196: "gdi32.dll!NtGdiDdWaitForVerticalBlank", -4197: "gdi32.dll!NtGdiDvpCanCreateVideoPort", -4198: "gdi32.dll!NtGdiDvpColorControl", -4199: "gdi32.dll!NtGdiDvpCreateVideoPort", -4200: "gdi32.dll!NtGdiDvpDestroyVideoPort", -4201: "gdi32.dll!NtGdiDvpFlipVideoPort", -4202: "gdi32.dll!NtGdiDvpGetVideoPortBandwidth", -4203: "gdi32.dll!NtGdiDvpGetVideoPortField", -4204: "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus", -4205: "gdi32.dll!NtGdiDvpGetVideoPortInputFormats", -4206: "gdi32.dll!NtGdiDvpGetVideoPortLine", -4207: "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats", -4208: "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo", -4209: "gdi32.dll!NtGdiDvpGetVideoSignalStatus", -4210: "gdi32.dll!NtGdiDvpUpdateVideoPort", -4211: "gdi32.dll!NtGdiDvpWaitForVideoPortSync", -4212: "gdi32.dll!NtGdiDvpAcquireNotification", -4213: "gdi32.dll!NtGdiDvpReleaseNotification", -4214: "gdi32.dll!NtGdiDxgGenericThunk", -4215: "gdi32.dll!NtGdiDeleteClientObj", -4216: "gdi32.dll!NtGdiDeleteColorSpace", -4217: "gdi32.dll!NtGdiDeleteColorTransform", -4218: "gdi32.dll!DeleteObject", -4219: "gdi32.dll!NtGdiDescribePixelFormat", -4220: "gdi32.dll!NtGdiGetPerBandInfo", -4221: "gdi32.dll!NtGdiDoBanding", -4222: "gdi32.dll!NtGdiDoPalette", -4223: "gdi32.dll!NtGdiDrawEscape", -4224: "gdi32.dll!NtGdiEllipse", -4225: "gdi32.dll!NtGdiEnableEudc", -4226: "gdi32.dll!NtGdiEndDoc", -4227: "gdi32.dll!NtGdiEndPage", -4228: "gdi32.dll!NtGdiEndPath", -4229: "gdi32.dll!NtGdiEnumFontChunk", -4230: "gdi32.dll!NtGdiEnumFontClose", -4231: "gdi32.dll!NtGdiEnumFontOpen", -4232: "gdi32.dll!NtGdiEnumObjects", -4233: "gdi32.dll!NtGdiEqualRgn", -4234: "gdi32.dll!NtGdiEudcLoadUnloadLink", -4235: "gdi32.dll!NtGdiExcludeClipRect", -4236: "gdi32.dll!NtGdiExtCreatePen", -4237: "gdi32.dll!NtGdiExtCreateRegion", -4238: "gdi32.dll!NtGdiExtEscape", -4239: "gdi32.dll!NtGdiExtFloodFill", -4240: "gdi32.dll!NtGdiExtGetObjectW", -4241: "gdi32.dll!ExtSelectClipRgn", -4242: "gdi32.dll!NtGdiExtTextOutW", -4243: "gdi32.dll!NtGdiFillPath", -4244: "gdi32.dll!NtGdiFillRgn", -4245: "gdi32.dll!NtGdiFlattenPath", -4247: "gdi32.dll!NtGdiFlush", -4248: "gdi32.dll!NtGdiForceUFIMapping", -4249: "gdi32.dll!NtGdiFrameRgn", -4250: "gdi32.dll!NtGdiFullscreenControl", -4251: "gdi32.dll!NtGdiGetAndSetDCDword", -4252: "gdi32.dll!GetClipBox", -4253: "gdi32.dll!GetBitmapBits", -4254: "gdi32.dll!NtGdiGetBitmapDimension", -4255: "gdi32.dll!NtGdiGetBoundsRect", -4256: "gdi32.dll!NtGdiGetCharABCWidthsW", -4257: "gdi32.dll!NtGdiGetCharacterPlacementW", -4258: "gdi32.dll!NtGdiGetCharSet", -4259: "gdi32.dll!NtGdiGetCharWidthW", -4260: "gdi32.dll!NtGdiGetCharWidthInfo", -4261: "gdi32.dll!NtGdiGetColorAdjustment", -4263: "gdi32.dll!NtGdiGetDCDword", -4264: "gdi32.dll!NtGdiGetDCforBitmap", -4265: "gdi32.dll!NtGdiGetDCObject", -4266: "gdi32.dll!NtGdiGetDCPoint", -4267: "gdi32.dll!NtGdiGetDeviceCaps", -4268: "gdi32.dll!NtGdiGetDeviceGammaRamp", -4269: "gdi32.dll!NtGdiGetDeviceCapsAll", -4270: "gdi32.dll!NtGdiGetDIBitsInternal", -4271: "gdi32.dll!NtGdiGetETM", -4272: "gdi32.dll!NtGdiGetEudcTimeStampEx", -4273: "gdi32.dll!GetFontData", -4274: "gdi32.dll!NtGdiGetFontResourceInfoInternalW", -4275: "gdi32.dll!NtGdiGetGlyphIndicesW", -4276: "gdi32.dll!NtGdiGetGlyphIndicesWInternal", -4277: "gdi32.dll!NtGdiGetGlyphOutline", -4278: "gdi32.dll!NtGdiGetKerningPairs", -4279: "gdi32.dll!NtGdiGetLinkedUFIs", -4280: "gdi32.dll!GetMiterLimit", -4281: "gdi32.dll!NtGdiGetMonitorID", -4282: "gdi32.dll!GetNearestColor", -4283: "gdi32.dll!NtGdiGetNearestPaletteIndex", -4284: "gdi32.dll!NtGdiGetObjectBitmapHandle", -4285: "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW", -4286: "gdi32.dll!NtGdiGetPath", -4287: "gdi32.dll!NtGdiGetPixel", -4288: "gdi32.dll!NtGdiGetRandomRgn", -4289: "gdi32.dll!GetRasterizerCaps", -4290: "gdi32.dll!NtGdiGetRealizationInfo", -4291: "gdi32.dll!GetRegionData", -4292: "gdi32.dll!NtGdiGetRgnBox", -4293: "gdi32.dll!NtGdiGetServerMetaFileBits", -4294: "gdi32.dll!NtGdiGetSpoolMessage", -4296: "gdi32.dll!NtGdiGetStockObject", -4297: "gdi32.dll!NtGdiGetStringBitmapW", -4298: "gdi32.dll!GetSystemPaletteUse", -4299: "gdi32.dll!NtGdiGetTextCharsetInfo", -4300: "gdi32.dll!NtGdiGetTextExtent", -4301: "gdi32.dll!NtGdiGetTextExtentExW", -4302: "gdi32.dll!NtGdiGetTextFaceW", -4303: "gdi32.dll!NtGdiGetTextMetricsW", -4304: "gdi32.dll!NtGdiGetTransform", -4305: "gdi32.dll!NtGdiGetUFI", -4306: "gdi32.dll!NtGdiGetEmbUFI", -4307: "gdi32.dll!NtGdiGetUFIPathname", -4308: "gdi32.dll!NtGdiGetEmbedFonts", -4309: "gdi32.dll!NtGdiChangeGhostFont", -4310: "gdi32.dll!NtGdiAddEmbFontToDC", -4311: "gdi32.dll!NtGdiGetFontUnicodeRanges", -4312: "gdi32.dll!NtGdiGetWidthTable", -4313: "gdi32.dll!NtGdiGradientFill", -4314: "gdi32.dll!NtGdiHfontCreate", -4315: "gdi32.dll!NtGdiIcmBrushInfo", -4316: "gdi32.dll!NtGdiInit", -4317: "gdi32.dll!NtGdiInitSpool", -4318: "gdi32.dll!NtGdiIntersectClipRect", -4319: "gdi32.dll!NtGdiInvertRgn", -4320: "gdi32.dll!NtGdiLineTo", -4321: "gdi32.dll!NtGdiMakeFontDir", -4322: "gdi32.dll!NtGdiMakeInfoDC", -4323: "gdi32.dll!NtGdiMaskBlt", -4324: "gdi32.dll!NtGdiModifyWorldTransform", -4325: "gdi32.dll!NtGdiMonoBitmap", -4327: "gdi32.dll!NtGdiOffsetClipRgn", -4328: "gdi32.dll!NtGdiOffsetRgn", -4329: "gdi32.dll!NtGdiOpenDCW", -4330: "gdi32.dll!NtGdiPatBlt", -4331: "gdi32.dll!NtGdiPolyPatBlt", -4332: "gdi32.dll!NtGdiPathToRegion", -4333: "gdi32.dll!NtGdiPlgBlt", -4334: "gdi32.dll!NtGdiPolyDraw", -4335: "gdi32.dll!NtGdiPolyPolyDraw", -4336: "gdi32.dll!NtGdiPolyTextOutW", -4337: "gdi32.dll!NtGdiPtInRegion", -4338: "gdi32.dll!NtGdiPtVisible", -4339: "gdi32.dll!NtGdiQueryFonts", -4340: "gdi32.dll!NtGdiQueryFontAssocInfo", -4341: "gdi32.dll!NtGdiRectangle", -4342: "gdi32.dll!NtGdiRectInRegion", -4343: "gdi32.dll!RectVisible", -4344: "gdi32.dll!NtGdiRemoveFontResourceW", -4345: "gdi32.dll!NtGdiRemoveFontMemResourceEx", -4346: "gdi32.dll!NtGdiResetDC", -4347: "gdi32.dll!NtGdiResizePalette", -4348: "gdi32.dll!NtGdiRestoreDC", -4349: "gdi32.dll!NtGdiRoundRect", -4350: "gdi32.dll!NtGdiSaveDC", -4351: "gdi32.dll!NtGdiScaleViewportExtEx", -4352: "gdi32.dll!NtGdiScaleWindowExtEx", -4353: "gdi32.dll!NtGdiSelectBitmap", -4355: "gdi32.dll!NtGdiSelectClipPath", -4356: "gdi32.dll!NtGdiSelectFont", -4357: "gdi32.dll!NtGdiSelectPen", -4358: "gdi32.dll!NtGdiSetBitmapAttributes", -4359: "gdi32.dll!SetBitmapBits", -4360: "gdi32.dll!NtGdiSetBitmapDimension", -4361: "gdi32.dll!NtGdiSetBoundsRect", -4362: "gdi32.dll!NtGdiSetBrushAttributes", -4363: "gdi32.dll!NtGdiSetBrushOrg", -4364: "gdi32.dll!NtGdiSetColorAdjustment", -4365: "gdi32.dll!NtGdiSetColorSpace", -4366: "gdi32.dll!NtGdiSetDeviceGammaRamp", -4367: "gdi32.dll!NtGdiSetDIBitsToDeviceInternal", -4368: "gdi32.dll!NtGdiSetFontEnumeration", -4369: "gdi32.dll!NtGdiSetFontXform", -4370: "gdi32.dll!NtGdiSetIcmMode", -4371: "gdi32.dll!NtGdiSetLinkedUFIs", -4372: "gdi32.dll!NtGdiSetMagicColors", -4373: "gdi32.dll!NtGdiSetMetaRgn", -4374: "gdi32.dll!NtGdiSetMiterLimit", -4375: "gdi32.dll!NtGdiGetDeviceWidth", -4376: "gdi32.dll!NtGdiMirrorWindowOrg", -4377: "gdi32.dll!NtGdiSetLayout", -4378: "gdi32.dll!NtGdiSetPixel", -4379: "gdi32.dll!NtGdiSetPixelFormat", -4380: "gdi32.dll!NtGdiSetRectRgn", -4381: "gdi32.dll!NtGdiSetSystemPaletteUse", -4383: "gdi32.dll!NtGdiSetupPublicCFONT", -4384: "gdi32.dll!NtGdiSetVirtualResolution", -4385: "gdi32.dll!NtGdiSetSizeDevice", -4386: "gdi32.dll!NtGdiStartDoc", -4387: "gdi32.dll!NtGdiStartPage", -4388: "gdi32.dll!NtGdiStretchBlt", -4389: "gdi32.dll!NtGdiStretchDIBitsInternal", -4390: "gdi32.dll!NtGdiStrokeAndFillPath", -4391: "gdi32.dll!NtGdiStrokePath", -4392: "gdi32.dll!NtGdiSwapBuffers", -4393: "gdi32.dll!NtGdiTransformPoints", -4394: "gdi32.dll!NtGdiTransparentBlt", -4395: "gdi32.dll!NtGdiUnloadPrinterDriver", -4397: "gdi32.dll!NtGdiUnrealizeObject", -4398: "gdi32.dll!NtGdiUpdateColors", -4399: "gdi32.dll!NtGdiWidenPath", -4400: "user32.dll!NtUserActivateKeyboardLayout", -4401: "user32.dll!NtUserAlterWindowStyle", -4402: "imm32.dll!NtUserAssociateInputContext", -4403: "user32.dll!NtUserAttachThreadInput", -4404: "user32.dll!NtUserBeginPaint", -4405: "user32.dll!NtUserBitBltSysBmp", -4406: "user32.dll!NtUserBlockInput", -4407: "imm32.dll!NtUserBuildHimcList", -4408: "user32.dll!NtUserBuildHwndList", -4409: "user32.dll!NtUserBuildNameList", -4410: "user32.dll!NtUserBuildPropList", -4411: "user32.dll!NtUserCallHwnd", -4412: "user32.dll!NtUserCallHwndLock", -4413: "user32.dll!NtUserCallHwndOpt", -4414: "user32.dll!NtUserCallHwndParam", -4415: "user32.dll!NtUserCallHwndParamLock", -4416: "user32.dll!NtUserCallMsgFilter", -4417: "user32.dll!NtUserCallNextHookEx", -4418: "user32.dll!NtUserCallNoParam", -4419: "imm32.dll!NtUserCallOneParam", -4419: "user32.dll!NtUserCallOneParam", -4420: "user32.dll!NtUserCallTwoParam", -4421: "user32.dll!NtUserChangeClipboardChain", -4422: "user32.dll!NtUserChangeDisplaySettings", -4424: "user32.dll!NtUserCheckMenuItem", -4425: "user32.dll!NtUserChildWindowFromPointEx", -4426: "user32.dll!NtUserClipCursor", -4427: "user32.dll!NtUserCloseClipboard", -4428: "user32.dll!NtUserCloseDesktop", -4429: "user32.dll!NtUserCloseWindowStation", -4431: "user32.dll!NtUserConvertMemHandle", -4432: "user32.dll!NtUserCopyAcceleratorTable", -4433: "user32.dll!NtUserCountClipboardFormats", -4434: "user32.dll!NtUserCreateAcceleratorTable", -4435: "user32.dll!NtUserCreateCaret", -4436: "user32.dll!NtUserCreateDesktop", -4437: "imm32.dll!NtUserCreateInputContext", -4438: "user32.dll!NtUserCreateLocalMemHandle", -4439: "user32.dll!NtUserCreateWindowEx", -4440: "user32.dll!NtUserCreateWindowStation", -4441: "user32.dll!NtUserDdeGetQualityOfService", -4442: "user32.dll!NtUserDdeInitialize", -4443: "user32.dll!NtUserDdeSetQualityOfService", -4444: "user32.dll!NtUserDeferWindowPos", -4445: "user32.dll!NtUserDefSetText", -4446: "user32.dll!NtUserDeleteMenu", -4447: "user32.dll!DestroyAcceleratorTable", -4448: "user32.dll!NtUserDestroyCursor", -4449: "imm32.dll!NtUserDestroyInputContext", -4450: "user32.dll!NtUserDestroyMenu", -4451: "user32.dll!NtUserDestroyWindow", -4452: "imm32.dll!NtUserDisableThreadIme", -4453: "user32.dll!NtUserDispatchMessage", -4454: "user32.dll!NtUserDragDetect", -4455: "user32.dll!NtUserDragObject", -4456: "user32.dll!NtUserDrawAnimatedRects", -4457: "user32.dll!NtUserDrawCaption", -4458: "user32.dll!NtUserDrawCaptionTemp", -4459: "user32.dll!NtUserDrawIconEx", -4460: "user32.dll!NtUserDrawMenuBarTemp", -4461: "user32.dll!NtUserEmptyClipboard", -4462: "user32.dll!NtUserEnableMenuItem", -4463: "user32.dll!NtUserEnableScrollBar", -4464: "user32.dll!NtUserEndDeferWindowPosEx", -4465: "user32.dll!NtUserEndMenu", -4466: "user32.dll!NtUserEndPaint", -4467: "user32.dll!NtUserEnumDisplayDevices", -4468: "user32.dll!NtUserEnumDisplayMonitors", -4469: "user32.dll!NtUserEnumDisplaySettings", -4470: "user32.dll!NtUserEvent", -4471: "user32.dll!NtUserExcludeUpdateRgn", -4472: "user32.dll!NtUserFillWindow", -4473: "user32.dll!NtUserFindExistingCursorIcon", -4474: "user32.dll!NtUserFindWindowEx", -4475: "user32.dll!NtUserFlashWindowEx", -4476: "user32.dll!NtUserGetAltTabInfo", -4477: "user32.dll!NtUserGetAncestor", -4478: "imm32.dll!NtUserGetAppImeLevel", -4479: "user32.dll!GetAsyncKeyState", -4480: "user32.dll!NtUserGetAtomName", -4481: "user32.dll!NtUserGetCaretBlinkTime", -4482: "user32.dll!NtUserGetCaretPos", -4483: "user32.dll!NtUserGetClassInfo", -4484: "user32.dll!NtUserGetClassName", -4485: "user32.dll!NtUserGetClipboardData", -4486: "user32.dll!NtUserGetClipboardFormatName", -4487: "user32.dll!NtUserGetClipboardOwner", -4488: "user32.dll!NtUserGetClipboardSequenceNumber", -4489: "user32.dll!NtUserGetClipboardViewer", -4490: "user32.dll!NtUserGetClipCursor", -4491: "user32.dll!NtUserGetComboBoxInfo", -4492: "user32.dll!NtUserGetControlBrush", -4493: "user32.dll!NtUserGetControlColor", -4494: "user32.dll!NtUserGetCPD", -4495: "user32.dll!NtUserGetCursorFrameInfo", -4496: "user32.dll!NtUserGetCursorInfo", -4497: "user32.dll!NtUserGetDC", -4498: "user32.dll!NtUserGetDCEx", -4499: "user32.dll!NtUserGetDoubleClickTime", -4500: "user32.dll!NtUserGetForegroundWindow", -4501: "user32.dll!NtUserGetGuiResources", -4502: "user32.dll!NtUserGetGUIThreadInfo", -4503: "user32.dll!NtUserGetIconInfo", -4504: "user32.dll!NtUserGetIconSize", -4505: "imm32.dll!NtUserGetImeHotKey", -4505: "user32.dll!NtUserGetImeHotKey", -4506: "imm32.dll!NtUserGetImeInfoEx", -4507: "user32.dll!NtUserGetInternalWindowPos", -4508: "user32.dll!NtUserGetKeyboardLayoutList", -4509: "user32.dll!NtUserGetKeyboardLayoutName", -4510: "user32.dll!NtUserGetKeyboardState", -4511: "user32.dll!NtUserGetKeyNameText", -4512: "user32.dll!NtUserGetKeyState", -4513: "user32.dll!NtUserGetListBoxInfo", -4514: "user32.dll!NtUserGetMenuBarInfo", -4515: "user32.dll!NtUserGetMenuIndex", -4516: "user32.dll!NtUserGetMenuItemRect", -4517: "user32.dll!NtUserGetMessage", -4518: "user32.dll!NtUserGetMouseMovePointsEx", -4519: "user32.dll!NtUserGetObjectInformation", -4520: "user32.dll!NtUserGetOpenClipboardWindow", -4521: "user32.dll!NtUserGetPriorityClipboardFormat", -4522: "user32.dll!NtUserGetProcessWindowStation", -4523: "user32.dll!NtUserGetRawInputBuffer", -4524: "user32.dll!NtUserGetRawInputData", -4525: "user32.dll!NtUserGetRawInputDeviceInfo", -4526: "user32.dll!NtUserGetRawInputDeviceList", -4527: "user32.dll!NtUserGetRegisteredRawInputDevices", -4528: "user32.dll!NtUserGetScrollBarInfo", -4529: "user32.dll!NtUserGetSystemMenu", -4530: "user32.dll!NtUserGetThreadDesktop", -4531: "imm32.dll!NtUserGetThreadState", -4531: "user32.dll!NtUserGetThreadState", -4532: "user32.dll!NtUserGetTitleBarInfo", -4533: "user32.dll!GetUpdateRect", -4534: "user32.dll!GetUpdateRgn", -4535: "user32.dll!NtUserGetWindowDC", -4536: "user32.dll!NtUserGetWindowPlacement", -4537: "user32.dll!NtUserGetWOWClass", -4539: "user32.dll!NtUserHideCaret", -4540: "user32.dll!NtUserHiliteMenuItem", -4541: "user32.dll!NtUserImpersonateDdeClientWindow", -4543: "user32.dll!NtUserInitializeClientPfnArrays", -4544: "user32.dll!NtUserInitTask", -4545: "user32.dll!NtUserInternalGetWindowText", -4546: "user32.dll!NtUserInvalidateRect", -4547: "user32.dll!NtUserInvalidateRgn", -4548: "user32.dll!NtUserIsClipboardFormatAvailable", -4549: "user32.dll!NtUserKillTimer", -4550: "user32.dll!NtUserLoadKeyboardLayoutEx", -4551: "user32.dll!NtUserLockWindowStation", -4552: "user32.dll!NtUserLockWindowUpdate", -4553: "user32.dll!NtUserLockWorkStation", -4554: "user32.dll!NtUserMapVirtualKeyEx", -4555: "user32.dll!NtUserMenuItemFromPoint", -4556: "user32.dll!NtUserMessageCall", -4557: "user32.dll!NtUserMinMaximize", -4558: "user32.dll!NtUserMNDragLeave", -4559: "user32.dll!NtUserMNDragOver", -4560: "user32.dll!NtUserModifyUserStartupInfoFlags", -4561: "user32.dll!NtUserMoveWindow", -4562: "imm32.dll!NtUserNotifyIMEStatus", -4562: "user32.dll!NtUserNotifyIMEStatus", -4564: "user32.dll!NtUserNotifyWinEvent", -4565: "user32.dll!NtUserOpenClipboard", -4566: "user32.dll!NtUserOpenDesktop", -4567: "user32.dll!NtUserOpenInputDesktop", -4568: "user32.dll!NtUserOpenWindowStation", -4569: "user32.dll!NtUserPaintDesktop", -4570: "user32.dll!PeekMessageW", -4571: "user32.dll!NtUserPostMessage", -4572: "user32.dll!NtUserPostThreadMessage", -4573: "user32.dll!NtUserPrintWindow", -4574: "user32.dll!NtUserProcessConnect", -4576: "imm32.dll!NtUserQueryInputContext", -4577: "user32.dll!NtUserQuerySendMessage", -4578: "user32.dll!NtUserQueryUserCounters", -4579: "imm32.dll!NtUserQueryWindow", -4579: "user32.dll!NtUserQueryWindow", -4580: "user32.dll!NtUserRealChildWindowFromPoint", -4581: "user32.dll!NtUserRealInternalGetMessage", -4582: "user32.dll!NtUserRealWaitMessageEx", -4583: "user32.dll!NtUserRedrawWindow", -4584: "user32.dll!NtUserRegisterClassExWOW", -4585: "user32.dll!NtUserRegisterUserApiHook", -4586: "user32.dll!NtUserRegisterHotKey", -4587: "user32.dll!NtUserRegisterRawInputDevices", -4588: "user32.dll!NtUserRegisterTasklist", -4589: "user32.dll!NtUserRegisterWindowMessage", -4590: "user32.dll!NtUserRemoveMenu", -4591: "user32.dll!NtUserRemoveProp", -4593: "user32.dll!NtUserResolveDesktopForWOW", -4594: "user32.dll!NtUserSBGetParms", -4595: "user32.dll!ScrollDC", -4596: "user32.dll!NtUserScrollWindowEx", -4597: "gdi32.dll!NtUserSelectPalette", -4598: "user32.dll!NtUserSendInput", -4599: "user32.dll!NtUserSetActiveWindow", -4600: "imm32.dll!NtUserSetAppImeLevel", -4601: "user32.dll!NtUserSetCapture", -4602: "user32.dll!NtUserSetClassLong", -4603: "user32.dll!NtUserSetClassWord", -4604: "user32.dll!NtUserSetClipboardData", -4605: "user32.dll!NtUserSetClipboardViewer", -4606: "user32.dll!NtUserSetConsoleReserveKeys", -4607: "user32.dll!NtUserSetCursor", -4608: "user32.dll!NtUserSetCursorContents", -4609: "user32.dll!NtUserSetCursorIconData", -4610: "user32.dll!NtUserSetDbgTag", -4611: "user32.dll!NtUserSetFocus", -4612: "user32.dll!NtUserSetImeHotKey", -4613: "imm32.dll!NtUserSetImeInfoEx", -4614: "user32.dll!NtUserSetImeOwnerWindow", -4616: "user32.dll!NtUserSetInformationThread", -4617: "user32.dll!NtUserSetInternalWindowPos", -4618: "user32.dll!NtUserSetKeyboardState", -4619: "user32.dll!NtUserSetLogonNotifyWindow", -4620: "user32.dll!NtUserSetMenu", -4621: "user32.dll!NtUserSetMenuContextHelpId", -4622: "user32.dll!NtUserSetMenuDefaultItem", -4623: "user32.dll!NtUserSetMenuFlagRtoL", -4624: "user32.dll!NtUserSetObjectInformation", -4625: "user32.dll!NtUserSetParent", -4626: "user32.dll!NtUserSetProcessWindowStation", -4627: "user32.dll!NtUserSetProp", -4628: "user32.dll!NtUserSetRipFlags", -4629: "user32.dll!NtUserSetScrollInfo", -4630: "user32.dll!NtUserSetShellWindowEx", -4631: "user32.dll!NtUserSetSysColors", -4632: "user32.dll!NtUserSetSystemCursor", -4633: "user32.dll!NtUserSetSystemMenu", -4634: "user32.dll!NtUserSetSystemTimer", -4635: "user32.dll!NtUserSetThreadDesktop", -4636: "imm32.dll!NtUserSetThreadLayoutHandles", -4637: "user32.dll!NtUserSetThreadState", -4638: "user32.dll!NtUserSetTimer", -4639: "user32.dll!NtUserSetWindowFNID", -4640: "user32.dll!NtUserSetWindowLong", -4641: "user32.dll!NtUserSetWindowPlacement", -4642: "user32.dll!NtUserSetWindowPos", -4643: "user32.dll!NtUserSetWindowRgn", -4644: "user32.dll!NtUserSetWindowsHookAW", -4645: "user32.dll!NtUserSetWindowsHookEx", -4646: "user32.dll!NtUserSetWindowStationUser", -4647: "user32.dll!NtUserSetWindowWord", -4648: "user32.dll!NtUserSetWinEventHook", -4649: "user32.dll!NtUserShowCaret", -4650: "user32.dll!NtUserShowScrollBar", -4651: "user32.dll!NtUserShowWindow", -4652: "user32.dll!NtUserShowWindowAsync", -4654: "user32.dll!NtUserSwitchDesktop", -4655: "user32.dll!NtUserSystemParametersInfo", -4657: "user32.dll!NtUserThunkedMenuInfo", -4658: "user32.dll!NtUserThunkedMenuItemInfo", -4659: "user32.dll!NtUserToUnicodeEx", -4660: "user32.dll!NtUserTrackMouseEvent", -4661: "user32.dll!NtUserTrackPopupMenuEx", -4662: "user32.dll!NtUserCalcMenuBar", -4663: "user32.dll!NtUserPaintMenuBar", -4664: "user32.dll!TranslateAcceleratorA", -4665: "user32.dll!NtUserTranslateMessage", -4666: "user32.dll!NtUserUnhookWindowsHookEx", -4667: "user32.dll!NtUserUnhookWinEvent", -4668: "user32.dll!NtUserUnloadKeyboardLayout", -4669: "user32.dll!NtUserUnlockWindowStation", -4670: "user32.dll!NtUserUnregisterClass", -4671: "user32.dll!NtUserUnregisterUserApiHook", -4672: "user32.dll!NtUserUnregisterHotKey", -4673: "imm32.dll!NtUserUpdateInputContext", -4673: "user32.dll!NtUserUpdateInputContext", -4674: "user32.dll!NtUserUpdateInstance", -4675: "user32.dll!NtUserUpdateLayeredWindow", -4676: "user32.dll!NtUserGetLayeredWindowAttributes", -4677: "user32.dll!NtUserSetLayeredWindowAttributes", -4678: "user32.dll!NtUserUpdatePerUserSystemParameters", -4679: "user32.dll!NtUserUserHandleGrantAccess", -4680: "imm32.dll!NtUserValidateHandleSecure", -4680: "user32.dll!NtUserValidateHandleSecure", -4681: "user32.dll!NtUserValidateRect", -4682: "user32.dll!NtUserValidateTimerCallback", -4683: "user32.dll!NtUserVkKeyScanEx", -4684: "user32.dll!NtUserWaitForInputIdle", -4685: "user32.dll!NtUserWaitForMsgAndEvent", -4686: "user32.dll!NtUserWaitMessage", -4687: "user32.dll!NtUserWin32PoolAllocationStats", -4688: "user32.dll!NtUserWindowFromPoint", -4689: "user32.dll!NtUserYieldTask", -4695: "gdi32.dll!NtGdiEngAssociateSurface", -4696: "gdi32.dll!NtGdiEngCreateBitmap", -4697: "gdi32.dll!NtGdiEngCreateDeviceSurface", -4698: "gdi32.dll!NtGdiEngCreateDeviceBitmap", -4699: "gdi32.dll!NtGdiEngCreatePalette", -4700: "gdi32.dll!NtGdiEngComputeGlyphSet", -4701: "gdi32.dll!NtGdiEngCopyBits", -4702: "gdi32.dll!NtGdiEngDeletePalette", -4703: "gdi32.dll!NtGdiEngDeleteSurface", -4704: "gdi32.dll!NtGdiEngEraseSurface", -4705: "gdi32.dll!NtGdiEngUnlockSurface", -4706: "gdi32.dll!NtGdiEngLockSurface", -4707: "gdi32.dll!NtGdiEngBitBlt", -4708: "gdi32.dll!NtGdiEngStretchBlt", -4709: "gdi32.dll!NtGdiEngPlgBlt", -4710: "gdi32.dll!NtGdiEngMarkBandingSurface", -4711: "gdi32.dll!NtGdiEngStrokePath", -4712: "gdi32.dll!NtGdiEngFillPath", -4713: "gdi32.dll!NtGdiEngStrokeAndFillPath", -4714: "gdi32.dll!NtGdiEngPaint", -4715: "gdi32.dll!NtGdiEngLineTo", -4716: "gdi32.dll!NtGdiEngAlphaBlend", -4717: "gdi32.dll!NtGdiEngGradientFill", -4718: "gdi32.dll!NtGdiEngTransparentBlt", -4719: "gdi32.dll!NtGdiEngTextOut", -4720: "gdi32.dll!NtGdiEngStretchBltROP", -4721: "gdi32.dll!NtGdiXLATEOBJ_cGetPalette", -4722: "gdi32.dll!NtGdiXLATEOBJ_iXlate", -4723: "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform", -4724: "gdi32.dll!NtGdiCLIPOBJ_bEnum", -4725: "gdi32.dll!NtGdiCLIPOBJ_cEnumStart", -4726: "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath", -4727: "gdi32.dll!NtGdiEngDeletePath", -4728: "gdi32.dll!NtGdiEngCreateClip", -4729: "gdi32.dll!NtGdiEngDeleteClip", -4730: "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor", -4731: "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush", -4732: "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush", -4733: "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform", -4734: "gdi32.dll!NtGdiXFORMOBJ_bApplyXform", -4735: "gdi32.dll!NtGdiXFORMOBJ_iGetXform", -4736: "gdi32.dll!NtGdiFONTOBJ_vGetInfo", -4737: "gdi32.dll!NtGdiFONTOBJ_pxoGetXform", -4738: "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs", -4739: "gdi32.dll!NtGdiFONTOBJ_pifi", -4740: "gdi32.dll!NtGdiFONTOBJ_pfdg", -4741: "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs", -4742: "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile", -4743: "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles", -4744: "gdi32.dll!NtGdiSTROBJ_bEnum", -4745: "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly", -4746: "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths", -4747: "gdi32.dll!NtGdiSTROBJ_vEnumStart", -4748: "gdi32.dll!NtGdiSTROBJ_dwGetCodePage", -4749: "gdi32.dll!NtGdiPATHOBJ_vGetBounds", -4750: "gdi32.dll!NtGdiPATHOBJ_bEnum", -4751: "gdi32.dll!NtGdiPATHOBJ_vEnumStart", -4752: "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines", -4753: "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines", -4754: "gdi32.dll!NtGdiGetDhpdev", -4755: "gdi32.dll!NtGdiEngCheckAbort", -4756: "gdi32.dll!NtGdiHT_Get8BPPFormatPalette", -4757: "gdi32.dll!NtGdiHT_Get8BPPMaskPalette", -4758: "gdi32.dll!NtGdiUpdateTransform", -4759: "gdi32.dll!NtGdiSetPUMPDOBJ", -4760: "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush", -4761: "gdi32.dll!NtGdiUMPDEngFreeUserMem", -4762: "gdi32.dll!NtGdiDrawStream", -} diff --git a/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc b/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc deleted file mode 100644 index e1aeec6765d..00000000000 --- a/chromium/tools/traceline/traceline/sidestep/ia32_modrm_map.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Table of relevant information about how to decode the ModR/M byte. -// Based on information in the IA-32 Intel Architecture -// Software Developer's Manual Volume 2: Instruction Set Reference. - -#include "sidestep/mini_disassembler.h" -#include "sidestep/mini_disassembler_types.h" - -namespace sidestep { - -const ModrmEntry MiniDisassembler::s_ia16_modrm_map_[] = { -// mod == 00 - /* r/m == 000 */ { false, false, OS_ZERO }, - /* r/m == 001 */ { false, false, OS_ZERO }, - /* r/m == 010 */ { false, false, OS_ZERO }, - /* r/m == 011 */ { false, false, OS_ZERO }, - /* r/m == 100 */ { false, false, OS_ZERO }, - /* r/m == 101 */ { false, false, OS_ZERO }, - /* r/m == 110 */ { true, false, OS_WORD }, - /* r/m == 111 */ { false, false, OS_ZERO }, -// mod == 01 - /* r/m == 000 */ { true, false, OS_BYTE }, - /* r/m == 001 */ { true, false, OS_BYTE }, - /* r/m == 010 */ { true, false, OS_BYTE }, - /* r/m == 011 */ { true, false, OS_BYTE }, - /* r/m == 100 */ { true, false, OS_BYTE }, - /* r/m == 101 */ { true, false, OS_BYTE }, - /* r/m == 110 */ { true, false, OS_BYTE }, - /* r/m == 111 */ { true, false, OS_BYTE }, -// mod == 10 - /* r/m == 000 */ { true, false, OS_WORD }, - /* r/m == 001 */ { true, false, OS_WORD }, - /* r/m == 010 */ { true, false, OS_WORD }, - /* r/m == 011 */ { true, false, OS_WORD }, - /* r/m == 100 */ { true, false, OS_WORD }, - /* r/m == 101 */ { true, false, OS_WORD }, - /* r/m == 110 */ { true, false, OS_WORD }, - /* r/m == 111 */ { true, false, OS_WORD }, -// mod == 11 - /* r/m == 000 */ { false, false, OS_ZERO }, - /* r/m == 001 */ { false, false, OS_ZERO }, - /* r/m == 010 */ { false, false, OS_ZERO }, - /* r/m == 011 */ { false, false, OS_ZERO }, - /* r/m == 100 */ { false, false, OS_ZERO }, - /* r/m == 101 */ { false, false, OS_ZERO }, - /* r/m == 110 */ { false, false, OS_ZERO }, - /* r/m == 111 */ { false, false, OS_ZERO } -}; - -const ModrmEntry MiniDisassembler::s_ia32_modrm_map_[] = { -// mod == 00 - /* r/m == 000 */ { false, false, OS_ZERO }, - /* r/m == 001 */ { false, false, OS_ZERO }, - /* r/m == 010 */ { false, false, OS_ZERO }, - /* r/m == 011 */ { false, false, OS_ZERO }, - /* r/m == 100 */ { false, true, OS_ZERO }, - /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 110 */ { false, false, OS_ZERO }, - /* r/m == 111 */ { false, false, OS_ZERO }, -// mod == 01 - /* r/m == 000 */ { true, false, OS_BYTE }, - /* r/m == 001 */ { true, false, OS_BYTE }, - /* r/m == 010 */ { true, false, OS_BYTE }, - /* r/m == 011 */ { true, false, OS_BYTE }, - /* r/m == 100 */ { true, true, OS_BYTE }, - /* r/m == 101 */ { true, false, OS_BYTE }, - /* r/m == 110 */ { true, false, OS_BYTE }, - /* r/m == 111 */ { true, false, OS_BYTE }, -// mod == 10 - /* r/m == 000 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 001 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 010 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 011 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 100 */ { true, true, OS_DOUBLE_WORD }, - /* r/m == 101 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 110 */ { true, false, OS_DOUBLE_WORD }, - /* r/m == 111 */ { true, false, OS_DOUBLE_WORD }, -// mod == 11 - /* r/m == 000 */ { false, false, OS_ZERO }, - /* r/m == 001 */ { false, false, OS_ZERO }, - /* r/m == 010 */ { false, false, OS_ZERO }, - /* r/m == 011 */ { false, false, OS_ZERO }, - /* r/m == 100 */ { false, false, OS_ZERO }, - /* r/m == 101 */ { false, false, OS_ZERO }, - /* r/m == 110 */ { false, false, OS_ZERO }, - /* r/m == 111 */ { false, false, OS_ZERO }, -}; - -}; // namespace sidestep diff --git a/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc b/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc deleted file mode 100644 index 4600cfa25b9..00000000000 --- a/chromium/tools/traceline/traceline/sidestep/ia32_opcode_map.cc +++ /dev/null @@ -1,1159 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Opcode decoding maps. Based on the IA-32 Intel Architecture -// Software Developer's Manual Volume 2: Instruction Set Reference. Idea -// for how to lay out the tables in memory taken from the implementation -// in the Bastard disassembly environment. - -#include "sidestep/mini_disassembler.h" - -namespace sidestep { - -/* -* This is the first table to be searched; the first field of each -* Opcode in the table is either 0 to indicate you're in the -* right table, or an index to the correct table, in the global -* map g_pentiumOpcodeMap -*/ -const Opcode s_first_opcode_byte[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF */ { 1, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x10 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x11 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x12 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x13 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x14 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x15 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x16 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x17 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x18 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x19 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1E */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1F */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x20 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x21 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x22 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x23 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x24 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x25 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x26 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x27 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "daa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x28 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x29 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "das", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x30 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x31 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x32 */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x33 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x34 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x35 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x36 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x37 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aaa", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x38 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x39 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3C */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3E */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "aas", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x40 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x41 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x42 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x43 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x44 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x45 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x46 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x47 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x48 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x49 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x50 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x51 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x52 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x53 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x54 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x55 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x56 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x57 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x58 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x59 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5A */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5B */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5C */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5D */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5E */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x60 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x61 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x62 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_A, AM_NOT_USED, "bound", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x63 */ { 0, IT_GENERIC, AM_E | OT_W, AM_G | OT_W, AM_NOT_USED, "arpl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x64 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x65 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x66 */ { 0, IT_PREFIX_OPERAND, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x67 */ { 0, IT_PREFIX_ADDRESS, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x68 */ { 0, IT_GENERIC, AM_I | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x69 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_V, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6A */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_I | OT_B, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6C */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "insb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6D */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "insd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6E */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X | OT_B, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6F */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X | OT_V, AM_NOT_USED, "outsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x70 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x71 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x72 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x73 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x74 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x75 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x76 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x77 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x78 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x79 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7A */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7B */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7C */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7D */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7E */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7F */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x80 */ { 2, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x81 */ { 3, IT_REFERENCE, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x82 */ { 4, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x83 */ { 5, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x84 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x85 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x86 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x87 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x88 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x89 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8A */ { 0, IT_GENERIC, AM_G | OT_B, AM_E | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8C */ { 0, IT_GENERIC, AM_E | OT_W, AM_S | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8D */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, "lea", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8E */ { 0, IT_GENERIC, AM_S | OT_W, AM_E | OT_W, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8F */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x90 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "nop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x91 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x92 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x93 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x94 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x95 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x96 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x97 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "xchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x98 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cwde", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x99 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cdq", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9A */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "callf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9B */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wait", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "pushfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "popfd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9E */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9F */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lahf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_O | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_O | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA2 */ { 0, IT_GENERIC, AM_O | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA3 */ { 0, IT_GENERIC, AM_O | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA4 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "movsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA5 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "movsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA6 */ { 0, IT_GENERIC, AM_X | OT_B, AM_Y | OT_B, AM_NOT_USED, "cmpsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA7 */ { 0, IT_GENERIC, AM_X | OT_V, AM_Y | OT_V, AM_NOT_USED, "cmpsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAA */ { 0, IT_GENERIC, AM_Y | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "stosb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAB */ { 0, IT_GENERIC, AM_Y | OT_V, AM_REGISTER | OT_V, AM_NOT_USED, "stosd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_X| OT_B, AM_NOT_USED, "lodsb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_X| OT_V, AM_NOT_USED, "lodsd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAE */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_Y | OT_B, AM_NOT_USED, "scasb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_Y | OT_V, AM_NOT_USED, "scasd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB0 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB1 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB2 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB3 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB8 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB9 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBA */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBB */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBC */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBD */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBE */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBF */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC0 */ { 6, IT_REFERENCE, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC1 */ { 7, IT_REFERENCE, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC2 */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC3 */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC4 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "les", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_V, AM_M | OT_P, AM_NOT_USED, "lds", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC8 */ { 0, IT_GENERIC, AM_I | OT_W, AM_I | OT_B, AM_NOT_USED, "enter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "leave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCA */ { 0, IT_RETURN, AM_I | OT_W, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCB */ { 0, IT_RETURN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "retf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "int3", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCD */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "int", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCE */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "into", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCF */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "iret", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD0 */ { 8, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD1 */ { 9, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD2 */ { 10, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD3 */ { 11, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD4 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aam", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD5 */ { 0, IT_GENERIC, AM_I | OT_B, AM_NOT_USED, AM_NOT_USED, "aad", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "xlat", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - - // The following 8 lines would be references to the FPU tables, but we currently - // do not support the FPU instructions in this disassembler. - - /* 0xD8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDA */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDB */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDC */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDD */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDE */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xDF */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - - - /* 0xE0 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE1 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loopz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE2 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "loop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE3 */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jcxz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE4 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE5 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_I | OT_B, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE6 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE7 */ { 0, IT_GENERIC, AM_I | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE8 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE9 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xEA */ { 0, IT_JUMP, AM_A | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xEB */ { 0, IT_JUMP, AM_J | OT_B, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xEC */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xED */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_REGISTER | OT_W, AM_NOT_USED, "in", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xEE */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_B, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xEF */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_REGISTER | OT_V, AM_NOT_USED, "out", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF0 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lock:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF2 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "repne:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF3 */ { 0, IT_PREFIX, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rep:", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF4 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "hlt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF6 */ { 12, IT_REFERENCE, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF7 */ { 13, IT_REFERENCE, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cli", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFB */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFC */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFD */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "std", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFE */ { 14, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xFF */ { 15, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f[] = { - /* 0x0 */ { 16, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 17, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "lsl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "invd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wbinvd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud2", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xE */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x10 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movups", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "movsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "movss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movupd" } }, - /* 0x11 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movups", true, - /* F2h */ { 0, IT_GENERIC, AM_W | OT_SD, AM_V | OT_SD, AM_NOT_USED, "movsd" }, - /* F3h */ { 0, IT_GENERIC, AM_W | OT_SS, AM_V | OT_SS, AM_NOT_USED, "movss" }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movupd" } }, - /* 0x12 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // only one of ... - /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhlps" }, // ...these two is correct, Intel doesn't specify which - /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_S, AM_NOT_USED, "movlpd" } }, - /* 0x13 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movlpd" } }, - /* 0x14 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpcklps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpcklpd" } }, - /* 0x15 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_Q, AM_NOT_USED, "unpckhps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_Q, AM_NOT_USED, "unpckhpd" } }, - /* 0x16 */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // only one of... - /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movlhps" }, // ...these two is correct, Intel doesn't specify which - /* 66h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movhpd" } }, - /* 0x17 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movhpd" } }, - /* 0x18 */ { 18, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x19 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1C */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x20 */ { 0, IT_GENERIC, AM_R | OT_D, AM_C | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x21 */ { 0, IT_GENERIC, AM_R | OT_D, AM_D | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x22 */ { 0, IT_GENERIC, AM_C | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x23 */ { 0, IT_GENERIC, AM_D | OT_D, AM_R | OT_D, AM_NOT_USED, "mov", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x24 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x25 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x26 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x27 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x28 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "movaps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "movapd" } }, - /* 0x29 */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movaps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movapd" } }, - /* 0x2A */ { 0, IT_GENERIC, AM_V | OT_PS, AM_Q | OT_Q, AM_NOT_USED, "cvtpi2ps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_E | OT_D, AM_NOT_USED, "cvtsi2sd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_E | OT_D, AM_NOT_USED, "cvtsi2ss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_Q | OT_DQ, AM_NOT_USED, "cvtpi2pd" } }, - /* 0x2B */ { 0, IT_GENERIC, AM_W | OT_PS, AM_V | OT_PS, AM_NOT_USED, "movntps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_PD, AM_V | OT_PD, AM_NOT_USED, "movntpd" } }, - /* 0x2C */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvttps2pi", true, - /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvttsd2si" }, - /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvttss2si" }, - /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2pi" } }, - /* 0x2D */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_W | OT_PS, AM_NOT_USED, "cvtps2pi", true, - /* F2h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SD, AM_NOT_USED, "cvtsd2si" }, - /* F3h */ { 0, IT_GENERIC, AM_G | OT_D, AM_W | OT_SS, AM_NOT_USED, "cvtss2si" }, - /* 66h */ { 0, IT_GENERIC, AM_Q | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2pi" } }, - /* 0x2E */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "ucomiss", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "ucomisd" } }, - /* 0x2F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_SS, AM_NOT_USED, "comiss", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "comisd" } }, - /* 0x30 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "wrmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x31 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdtsc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x32 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdmsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x33 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rdpmc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x34 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysenter", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x35 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "sysexit", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x36 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x37 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x38 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x39 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3A */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3B */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3D */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3E */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3F */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x40 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x41 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x42 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x43 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x44 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x45 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x46 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x47 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmova", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x48 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x49 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4A */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4B */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4C */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4D */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4E */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4F */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "cmovg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x50 */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PS, AM_NOT_USED, "movmskps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_PD, AM_NOT_USED, "movmskpd" } }, - /* 0x51 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "sqrtps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "sqrtsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "sqrtss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "sqrtpd" } }, - /* 0x52 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rsqrtps", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rsqrtss" }, - /* 66h */ { 0 } }, - /* 0x53 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "rcpps", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "rcpss" }, - /* 66h */ { 0 } }, - /* 0x54 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andpd" } }, - /* 0x55 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "andnps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "andnpd" } }, - /* 0x56 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "orps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "orpd" } }, - /* 0x57 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "xorps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "xorpd" } }, - /* 0x58 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "addps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "addsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "addss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "addpd" } }, - /* 0x59 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "mulps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "mulsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "mulss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "mulpd" } }, - /* 0x5A */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PS, AM_NOT_USED, "cvtps2pd", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "cvtsd2ss" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "cvtss2sd" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PD, AM_NOT_USED, "cvtpd2ps" } }, - /* 0x5B */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2ps", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvttps2dq" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PS, AM_NOT_USED, "cvtps2dq" } }, - /* 0x5C */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "subps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "subsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "subss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "subpd" } }, - /* 0x5D */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "minps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "minsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "minss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "minpd" } }, - /* 0x5E */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "divps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "divsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "divss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "divpd" } }, - /* 0x5F */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_NOT_USED, "maxps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_NOT_USED, "maxsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_NOT_USED, "maxss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_NOT_USED, "maxpd" } }, - /* 0x60 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklbw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklbw" } }, - /* 0x61 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpcklwd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklwd" } }, - /* 0x62 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckldq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpckldq" } }, - /* 0x63 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packsswb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packsswb" } }, - /* 0x64 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtb" } }, - /* 0x65 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtw" } }, - /* 0x66 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "pcmpgtd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpgtd" } }, - /* 0x67 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packuswb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "packuswb" } }, - /* 0x68 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhbw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhbw" } }, - /* 0x69 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhwd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhwd" } }, - /* 0x6A */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "punpckhdq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "punpckhdq" } }, - /* 0x6B */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "packssdw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_Q | OT_DQ, AM_NOT_USED, "packssdw" } }, - /* 0x6C */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } }, - /* 0x6D */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "punpcklqdq" } }, - /* 0x6E */ { 0, IT_GENERIC, AM_P | OT_D, AM_E | OT_D, AM_NOT_USED, "movd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_NOT_USED, "movd" } }, - /* 0x6F */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_D, AM_NOT_USED, "movq", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqu" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "movdqa" } }, - /* 0x70 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_I | OT_B, "pshuf", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshuflw" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufhw" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_I | OT_B, "pshufd" } }, - /* 0x71 */ { 19, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x72 */ { 20, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x73 */ { 21, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x74 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqb" } }, - /* 0x75 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqw" } }, - /* 0x76 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pcmpeqd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pcmpeqd" } }, - /* 0x77 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "emms", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - - // The following six opcodes are escapes into the MMX stuff, which this disassembler does not support. - /* 0x78 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x79 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7A */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7B */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7C */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7D */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - - /* 0x7E */ { 0, IT_GENERIC, AM_E | OT_D, AM_P | OT_D, AM_NOT_USED, "movd", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movq" }, - /* 66h */ { 0, IT_GENERIC, AM_E | OT_D, AM_V | OT_DQ, AM_NOT_USED, "movd" } }, - /* 0x7F */ { 0, IT_GENERIC, AM_Q | OT_Q, AM_P | OT_Q, AM_NOT_USED, "movq", true, - /* F2h */ { 0 }, - /* F3h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqu" }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movdqa" } }, - /* 0x80 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x81 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x82 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x83 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x84 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x85 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x86 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x87 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "ja", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x88 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "js", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x89 */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8A */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8B */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8C */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8D */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8E */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x8F */ { 0, IT_JUMP, AM_J | OT_V, AM_NOT_USED, AM_NOT_USED, "jg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x90 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seto", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x91 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setno", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x92 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x93 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x94 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x95 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setnz", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x96 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setbe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x97 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "seta", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x98 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "sets", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x99 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setns", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9A */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpe", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9B */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setpo", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9C */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9D */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setge", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9E */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setle", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x9F */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "setg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA0 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA1 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "cpuid", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shld", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA6 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA7 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA8 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xA9 */ { 0, IT_GENERIC, AM_REGISTER | OT_W, AM_NOT_USED, AM_NOT_USED, "pop", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAA */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "rsm", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAC */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAD */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_I | OT_B | AM_REGISTER, "shrd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAE */ { 22, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xAF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "cmpxchg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB2 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lss", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB4 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lfs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB5 */ { 0, IT_GENERIC, AM_M | OT_P, AM_NOT_USED, AM_NOT_USED, "lgs", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB6 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB7 */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movzx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB8 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xB9 */ { 0, IT_UNKNOWN, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ud1", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBA */ { 23, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBB */ { 0, IT_GENERIC, AM_E | OT_V, AM_G | OT_V, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBC */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsf", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBD */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_V, AM_NOT_USED, "bsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBE */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_B, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xBF */ { 0, IT_GENERIC, AM_G | OT_V, AM_E | OT_W, AM_NOT_USED, "movsx", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_G | OT_B, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "xadd", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC2 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "cmpps", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_SD, AM_W | OT_SD, AM_I | OT_B, "cmpsd" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_SS, AM_W | OT_SS, AM_I | OT_B, "cmpss" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "cmppd" } }, - /* 0xC3 */ { 0, IT_GENERIC, AM_E | OT_D, AM_G | OT_D, AM_NOT_USED, "movnti", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_E | OT_D, AM_I | OT_B, "pinsrw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_E | OT_D, AM_I | OT_B, "pinsrw" } }, - /* 0xC5 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_I | OT_B, "pextrw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_I | OT_B, "pextrw" } }, - /* 0xC6 */ { 0, IT_GENERIC, AM_V | OT_PS, AM_W | OT_PS, AM_I | OT_B, "shufps", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_PD, AM_I | OT_B, "shufpd" } }, - /* 0xC7 */ { 24, IT_REFERENCE, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC8 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xC9 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCA */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCB */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCC */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCD */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCE */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xCF */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "bswap", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xD1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlw" } }, - /* 0xD2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrld", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrld" } }, - /* 0xD3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrlq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrlq" } }, - /* 0xD4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddq" } }, - /* 0xD5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmullw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmullw" } }, - /* 0xD6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "unused without prefix", true, - /* F2h */ { 0, IT_GENERIC, AM_P | OT_Q, AM_W | OT_Q, AM_NOT_USED, "movdq2q" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_Q | OT_Q, AM_NOT_USED, "movq2dq" }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movq" } }, - /* 0xD7 */ { 0, IT_GENERIC, AM_G | OT_D, AM_P | OT_Q, AM_NOT_USED, "pmovmskb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_G | OT_D, AM_V | OT_DQ, AM_NOT_USED, "pmovmskb" } }, - /* 0xD8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusb" } }, - /* 0xD9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubusw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubusw" } }, - /* 0xDA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminub", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminub" } }, - /* 0xDB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pand", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pand" } }, - /* 0xDC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusb" } }, - /* 0xDD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddusw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddusw" } }, - /* 0xDE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxub", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxub" } }, - /* 0xDF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pandn", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pandn" } }, - /* 0xE0 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgb" } }, - /* 0xE1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psraw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrqw" } }, - /* 0xE2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psrad", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psrad" } }, - /* 0xE3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pavgw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pavgw" } }, - /* 0xE4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhuw" } }, - /* 0xE5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmulhuw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmulhw" } }, - /* 0xE6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "not used without prefix", true, - /* F2h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvtpd2dq" }, - /* F3h */ { 0, IT_GENERIC, AM_V | OT_PD, AM_W | OT_DQ, AM_NOT_USED, "cvtdq2pd" }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_PD, AM_NOT_USED, "cvttpd2dq" } }, - /* 0xE7 */ { 0, IT_GENERIC, AM_W | OT_Q, AM_V | OT_Q, AM_NOT_USED, "movntq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_V | OT_DQ, AM_NOT_USED, "movntdq" } }, - /* 0xE8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsb" } }, - /* 0xE9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubsw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubsw" } }, - /* 0xEA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pminsw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pminsw" } }, - /* 0xEB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "por", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "por" } }, - /* 0xEC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsb" } }, - /* 0xED */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddsw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddsw" } }, - /* 0xEE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaxsw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaxsw" } }, - /* 0xEF */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pxor", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pxor" } }, - /* 0xF0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0xF1 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllw" } }, - /* 0xF2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pslld", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pslld" } }, - /* 0xF3 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psllq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psllq" } }, - /* 0xF4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmuludq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmuludq" } }, - /* 0xF5 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "pmaddwd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "pmaddwd" } }, - /* 0xF6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psadbw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psadbw" } }, - /* 0xF7 */ { 0, IT_GENERIC, AM_P | OT_PI, AM_Q | OT_PI, AM_NOT_USED, "maskmovq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "maskmovdqu" } }, - /* 0xF8 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubb" } }, - /* 0xF9 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubw" } }, - /* 0xFA */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubd" } }, - /* 0xFB */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "psubq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "psubq" } }, - /* 0xFC */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddb", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddb" } }, - /* 0xFD */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddw" } }, - /* 0xFE */ { 0, IT_GENERIC, AM_P | OT_Q, AM_Q | OT_Q, AM_NOT_USED, "paddd", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_V | OT_DQ, AM_W | OT_DQ, AM_NOT_USED, "paddd" } }, - /* 0xFF */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f00[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "sldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "str", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lldt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "ltr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "verw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f01[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "sidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lgdt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_M | OT_S, AM_NOT_USED, AM_NOT_USED, "lidt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "smsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_W, AM_NOT_USED, AM_NOT_USED, "lmsw", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_M | OT_B, AM_NOT_USED, AM_NOT_USED, "invlpg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f18[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_M | OT_ADDRESS_MODE_M, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_REGISTER | OT_D, AM_NOT_USED, AM_NOT_USED, "prefetch", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f71[] = { - /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlw" } }, - /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psraw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psraw" } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllw", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_P | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllw" } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f72[] = { - /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrld", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrld" } }, - /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrad", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrad" } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "pslld", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslld" } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0f73[] = { - /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psrlq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psrlq" } }, - /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_P | OT_Q, AM_I | OT_B, AM_NOT_USED, "psllq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "psllq" } }, - /* 0x7 */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq", true, - /* F2h */ { 0 }, - /* F3h */ { 0 }, - /* 66h */ { 0, IT_GENERIC, AM_W | OT_DQ, AM_I | OT_B, AM_NOT_USED, "pslldq" } }, -}; - -const Opcode s_opcode_byte_after_0fae[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxsave", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "fxrstor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "ldmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "stmxcsr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "lfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "mfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, "clflush/sfence", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, -}; - -const Opcode s_opcode_byte_after_0fba[] = { - /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bt", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "bts", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "btc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_0fc7[] = { - /* 0x0 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_M | OT_Q, AM_NOT_USED, AM_NOT_USED, "cmpxch8b", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_80[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_81[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_82[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_83[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "add", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "or", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "adc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sbb", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "and", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sub", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "xor", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "cmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_c0[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_c1[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_d0[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_d1[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_IMPLICIT, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_d2[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_B, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_d3[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rol", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "ror", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "rcr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shl", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "shr", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sal", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_E | OT_V, AM_REGISTER | OT_B, AM_NOT_USED, "sar", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_f6[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_I | OT_B, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, OT_B | AM_REGISTER, AM_E | OT_B, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_B, AM_E | OT_B, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_f7[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_I | OT_V, AM_NOT_USED, "test", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "not", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "neg", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "mul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "imul", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "div", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_GENERIC, AM_REGISTER | OT_V, AM_E | OT_V, AM_NOT_USED, "idiv", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_fe[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_B, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -const Opcode s_opcode_byte_after_ff[] = { - /* 0x0 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "inc", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x1 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "dec", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x2 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x3 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "call", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x4 */ { 0, IT_JUMP, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x5 */ { 0, IT_JUMP, AM_E | OT_P, AM_NOT_USED, AM_NOT_USED, "jmp", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x6 */ { 0, IT_GENERIC, AM_E | OT_V, AM_NOT_USED, AM_NOT_USED, "push", false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } }, - /* 0x7 */ { 0, IT_UNUSED, AM_NOT_USED, AM_NOT_USED, AM_NOT_USED, 0, false, /* F2h */ { 0 }, /* F3h */ { 0 }, /* 66h */ { 0 } } -}; - -/* -* A table of all the other tables, containing some extra information, e.g. -* how to mask out the byte we're looking at. -*/ -const OpcodeTable MiniDisassembler::s_ia32_opcode_map_[]={ - // One-byte opcodes and jumps to larger - /* 0 */ {s_first_opcode_byte, 0, 0xff, 0, 0xff}, - // Two-byte opcodes (second byte) - /* 1 */ {s_opcode_byte_after_0f, 0, 0xff, 0, 0xff}, - // Start of tables for opcodes using ModR/M bits as extension - /* 2 */ {s_opcode_byte_after_80, 3, 0x07, 0, 0x07}, - /* 3 */ {s_opcode_byte_after_81, 3, 0x07, 0, 0x07}, - /* 4 */ {s_opcode_byte_after_82, 3, 0x07, 0, 0x07}, - /* 5 */ {s_opcode_byte_after_83, 3, 0x07, 0, 0x07}, - /* 6 */ {s_opcode_byte_after_c0, 3, 0x07, 0, 0x07}, - /* 7 */ {s_opcode_byte_after_c1, 3, 0x07, 0, 0x07}, - /* 8 */ {s_opcode_byte_after_d0, 3, 0x07, 0, 0x07}, - /* 9 */ {s_opcode_byte_after_d1, 3, 0x07, 0, 0x07}, - /* 10 */ {s_opcode_byte_after_d2, 3, 0x07, 0, 0x07}, - /* 11 */ {s_opcode_byte_after_d3, 3, 0x07, 0, 0x07}, - /* 12 */ {s_opcode_byte_after_f6, 3, 0x07, 0, 0x07}, - /* 13 */ {s_opcode_byte_after_f7, 3, 0x07, 0, 0x07}, - /* 14 */ {s_opcode_byte_after_fe, 3, 0x07, 0, 0x01}, - /* 15 */ {s_opcode_byte_after_ff, 3, 0x07, 0, 0x07}, - /* 16 */ {s_opcode_byte_after_0f00, 3, 0x07, 0, 0x07}, - /* 17 */ {s_opcode_byte_after_0f01, 3, 0x07, 0, 0x07}, - /* 18 */ {s_opcode_byte_after_0f18, 3, 0x07, 0, 0x07}, - /* 19 */ {s_opcode_byte_after_0f71, 3, 0x07, 0, 0x07}, - /* 20 */ {s_opcode_byte_after_0f72, 3, 0x07, 0, 0x07}, - /* 21 */ {s_opcode_byte_after_0f73, 3, 0x07, 0, 0x07}, - /* 22 */ {s_opcode_byte_after_0fae, 3, 0x07, 0, 0x07}, - /* 23 */ {s_opcode_byte_after_0fba, 3, 0x07, 0, 0x07}, - /* 24 */ {s_opcode_byte_after_0fc7, 3, 0x07, 0, 0x01} -}; - -}; // namespace sidestep diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc b/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc deleted file mode 100644 index a603ebe637a..00000000000 --- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.cc +++ /dev/null @@ -1,416 +0,0 @@ -// Copyright 2008, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Implementation of MiniDisassembler. - -#include "sidestep/mini_disassembler.h" - -namespace sidestep { - -MiniDisassembler::MiniDisassembler(bool operand_default_is_32_bits, - bool address_default_is_32_bits) - : operand_default_is_32_bits_(operand_default_is_32_bits), - address_default_is_32_bits_(address_default_is_32_bits) { - Initialize(); -} - -MiniDisassembler::MiniDisassembler() - : operand_default_is_32_bits_(true), - address_default_is_32_bits_(true) { - Initialize(); -} - -InstructionType MiniDisassembler::Disassemble( - unsigned char* start_byte, - unsigned int* instruction_bytes) { - // Clean up any state from previous invocations. - Initialize(); - - // Start by processing any prefixes. - unsigned char* current_byte = start_byte; - unsigned int size = 0; - InstructionType instruction_type = ProcessPrefixes(current_byte, &size); - - if (IT_UNKNOWN == instruction_type) - return instruction_type; - - current_byte += size; - size = 0; - - // Invariant: We have stripped all prefixes, and the operand_is_32_bits_ - // and address_is_32_bits_ flags are correctly set. - - instruction_type = ProcessOpcode(current_byte, 0, &size); - - // Check for error processing instruction - if ((IT_UNKNOWN == instruction_type_) || (IT_UNUSED == instruction_type_)) { - return IT_UNKNOWN; - } - - current_byte += size; - - // Invariant: operand_bytes_ indicates the total size of operands - // specified by the opcode and/or ModR/M byte and/or SIB byte. - // pCurrentByte points to the first byte after the ModR/M byte, or after - // the SIB byte if it is present (i.e. the first byte of any operands - // encoded in the instruction). - - // We get the total length of any prefixes, the opcode, and the ModR/M and - // SIB bytes if present, by taking the difference of the original starting - // address and the current byte (which points to the first byte of the - // operands if present, or to the first byte of the next instruction if - // they are not). Adding the count of bytes in the operands encoded in - // the instruction gives us the full length of the instruction in bytes. - *instruction_bytes += operand_bytes_ + (current_byte - start_byte); - - // Return the instruction type, which was set by ProcessOpcode(). - return instruction_type_; -} - -void MiniDisassembler::Initialize() { - operand_is_32_bits_ = operand_default_is_32_bits_; - address_is_32_bits_ = address_default_is_32_bits_; - operand_bytes_ = 0; - have_modrm_ = false; - should_decode_modrm_ = false; - instruction_type_ = IT_UNKNOWN; - got_f2_prefix_ = false; - got_f3_prefix_ = false; - got_66_prefix_ = false; -} - -InstructionType MiniDisassembler::ProcessPrefixes(unsigned char* start_byte, - unsigned int* size) { - InstructionType instruction_type = IT_GENERIC; - const Opcode& opcode = s_ia32_opcode_map_[0].table_[*start_byte]; - - switch (opcode.type_) { - case IT_PREFIX_ADDRESS: - address_is_32_bits_ = !address_default_is_32_bits_; - goto nochangeoperand; - case IT_PREFIX_OPERAND: - operand_is_32_bits_ = !operand_default_is_32_bits_; - nochangeoperand: - case IT_PREFIX: - - if (0xF2 == (*start_byte)) - got_f2_prefix_ = true; - else if (0xF3 == (*start_byte)) - got_f3_prefix_ = true; - else if (0x66 == (*start_byte)) - got_66_prefix_ = true; - - instruction_type = opcode.type_; - (*size)++; - // we got a prefix, so add one and check next byte - ProcessPrefixes(start_byte + 1, size); - default: - break; // not a prefix byte - } - - return instruction_type; -} - -InstructionType MiniDisassembler::ProcessOpcode(unsigned char* start_byte, - unsigned int table_index, - unsigned int* size) { - const OpcodeTable& table = s_ia32_opcode_map_[table_index]; // Get our table - unsigned char current_byte = (*start_byte) >> table.shift_; - current_byte = current_byte & table.mask_; // Mask out the bits we will use - - // Check whether the byte we have is inside the table we have. - if (current_byte < table.min_lim_ || current_byte > table.max_lim_) { - instruction_type_ = IT_UNKNOWN; - return instruction_type_; - } - - const Opcode& opcode = table.table_[current_byte]; - if (IT_UNUSED == opcode.type_) { - // This instruction is not used by the IA-32 ISA, so we indicate - // this to the user. Probably means that we were pointed to - // a byte in memory that was not the start of an instruction. - instruction_type_ = IT_UNUSED; - return instruction_type_; - } else if (IT_REFERENCE == opcode.type_) { - // We are looking at an opcode that has more bytes (or is continued - // in the ModR/M byte). Recursively find the opcode definition in - // the table for the opcode's next byte. - (*size)++; - ProcessOpcode(start_byte + 1, opcode.table_index_, size); - return instruction_type_; - } - - const SpecificOpcode* specific_opcode = reinterpret_cast< - const SpecificOpcode*>(&opcode); - if (opcode.is_prefix_dependent_) { - if (got_f2_prefix_ && opcode.opcode_if_f2_prefix_.mnemonic_ != 0) { - specific_opcode = &opcode.opcode_if_f2_prefix_; - } else if (got_f3_prefix_ && opcode.opcode_if_f3_prefix_.mnemonic_ != 0) { - specific_opcode = &opcode.opcode_if_f3_prefix_; - } else if (got_66_prefix_ && opcode.opcode_if_66_prefix_.mnemonic_ != 0) { - specific_opcode = &opcode.opcode_if_66_prefix_; - } - } - - // Inv: The opcode type is known. - instruction_type_ = specific_opcode->type_; - - // Let's process the operand types to see if we have any immediate - // operands, and/or a ModR/M byte. - - ProcessOperand(specific_opcode->flag_dest_); - ProcessOperand(specific_opcode->flag_source_); - ProcessOperand(specific_opcode->flag_aux_); - - // Inv: We have processed the opcode and incremented operand_bytes_ - // by the number of bytes of any operands specified by the opcode - // that are stored in the instruction (not registers etc.). Now - // we need to return the total number of bytes for the opcode and - // for the ModR/M or SIB bytes if they are present. - - if (table.mask_ != 0xff) { - if (have_modrm_) { - // we're looking at a ModR/M byte so we're not going to - // count that into the opcode size - ProcessModrm(start_byte, size); - return IT_GENERIC; - } else { - // need to count the ModR/M byte even if it's just being - // used for opcode extension - (*size)++; - return IT_GENERIC; - } - } else { - if (have_modrm_) { - // The ModR/M byte is the next byte. - (*size)++; - ProcessModrm(start_byte + 1, size); - return IT_GENERIC; - } else { - (*size)++; - return IT_GENERIC; - } - } -} - -bool MiniDisassembler::ProcessOperand(int flag_operand) { - bool succeeded = true; - if (AM_NOT_USED == flag_operand) - return succeeded; - - // Decide what to do based on the addressing mode. - switch (flag_operand & AM_MASK) { - // No ModR/M byte indicated by these addressing modes, and no - // additional (e.g. immediate) parameters. - case AM_A: // Direct address - case AM_F: // EFLAGS register - case AM_X: // Memory addressed by the DS:SI register pair - case AM_Y: // Memory addressed by the ES:DI register pair - case AM_IMPLICIT: // Parameter is implicit, occupies no space in - // instruction - break; - - // There is a ModR/M byte but it does not necessarily need - // to be decoded. - case AM_C: // reg field of ModR/M selects a control register - case AM_D: // reg field of ModR/M selects a debug register - case AM_G: // reg field of ModR/M selects a general register - case AM_P: // reg field of ModR/M selects an MMX register - case AM_R: // mod field of ModR/M may refer only to a general register - case AM_S: // reg field of ModR/M selects a segment register - case AM_T: // reg field of ModR/M selects a test register - case AM_V: // reg field of ModR/M selects a 128-bit XMM register - have_modrm_ = true; - break; - - // In these addressing modes, there is a ModR/M byte and it needs to be - // decoded. No other (e.g. immediate) params than indicated in ModR/M. - case AM_E: // Operand is either a general-purpose register or memory, - // specified by ModR/M byte - case AM_M: // ModR/M byte will refer only to memory - case AM_Q: // Operand is either an MMX register or memory (complex - // evaluation), specified by ModR/M byte - case AM_W: // Operand is either a 128-bit XMM register or memory (complex - // eval), specified by ModR/M byte - have_modrm_ = true; - should_decode_modrm_ = true; - break; - - // These addressing modes specify an immediate or an offset value - // directly, so we need to look at the operand type to see how many - // bytes. - case AM_I: // Immediate data. - case AM_J: // Jump to offset. - case AM_O: // Operand is at offset. - switch (flag_operand & OT_MASK) { - case OT_B: // Byte regardless of operand-size attribute. - operand_bytes_ += OS_BYTE; - break; - case OT_C: // Byte or word, depending on operand-size attribute. - if (operand_is_32_bits_) - operand_bytes_ += OS_WORD; - else - operand_bytes_ += OS_BYTE; - break; - case OT_D: // Doubleword, regardless of operand-size attribute. - operand_bytes_ += OS_DOUBLE_WORD; - break; - case OT_DQ: // Double-quadword, regardless of operand-size attribute. - operand_bytes_ += OS_DOUBLE_QUAD_WORD; - break; - case OT_P: // 32-bit or 48-bit pointer, depending on operand-size - // attribute. - if (operand_is_32_bits_) - operand_bytes_ += OS_48_BIT_POINTER; - else - operand_bytes_ += OS_32_BIT_POINTER; - break; - case OT_PS: // 128-bit packed single-precision floating-point data. - operand_bytes_ += OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING; - break; - case OT_Q: // Quadword, regardless of operand-size attribute. - operand_bytes_ += OS_QUAD_WORD; - break; - case OT_S: // 6-byte pseudo-descriptor. - operand_bytes_ += OS_PSEUDO_DESCRIPTOR; - break; - case OT_SD: // Scalar Double-Precision Floating-Point Value - case OT_PD: // Unaligned packed double-precision floating point value - operand_bytes_ += OS_DOUBLE_PRECISION_FLOATING; - break; - case OT_SS: - // Scalar element of a 128-bit packed single-precision - // floating data. - // We simply return enItUnknown since we don't have to support - // floating point - succeeded = false; - break; - case OT_V: // Word or doubleword, depending on operand-size attribute. - if (operand_is_32_bits_) - operand_bytes_ += OS_DOUBLE_WORD; - else - operand_bytes_ += OS_WORD; - break; - case OT_W: // Word, regardless of operand-size attribute. - operand_bytes_ += OS_WORD; - break; - - // Can safely ignore these. - case OT_A: // Two one-word operands in memory or two double-word - // operands in memory - case OT_PI: // Quadword MMX technology register (e.g. mm0) - case OT_SI: // Doubleword integer register (e.g., eax) - break; - - default: - break; - } - break; - - default: - break; - } - - return succeeded; -} - -bool MiniDisassembler::ProcessModrm(unsigned char* start_byte, - unsigned int* size) { - // If we don't need to decode, we just return the size of the ModR/M - // byte (there is never a SIB byte in this case). - if (!should_decode_modrm_) { - (*size)++; - return true; - } - - // We never care about the reg field, only the combination of the mod - // and r/m fields, so let's start by packing those fields together into - // 5 bits. - unsigned char modrm = (*start_byte); - unsigned char mod = modrm & 0xC0; // mask out top two bits to get mod field - modrm = modrm & 0x07; // mask out bottom 3 bits to get r/m field - mod = mod >> 3; // shift the mod field to the right place - modrm = mod | modrm; // combine the r/m and mod fields as discussed - mod = mod >> 3; // shift the mod field to bits 2..0 - - // Invariant: modrm contains the mod field in bits 4..3 and the r/m field - // in bits 2..0, and mod contains the mod field in bits 2..0 - - const ModrmEntry* modrm_entry = 0; - if (address_is_32_bits_) - modrm_entry = &s_ia32_modrm_map_[modrm]; - else - modrm_entry = &s_ia16_modrm_map_[modrm]; - - // Invariant: modrm_entry points to information that we need to decode - // the ModR/M byte. - - // Add to the count of operand bytes, if the ModR/M byte indicates - // that some operands are encoded in the instruction. - if (modrm_entry->is_encoded_in_instruction_) - operand_bytes_ += modrm_entry->operand_size_; - - // Process the SIB byte if necessary, and return the count - // of ModR/M and SIB bytes. - if (modrm_entry->use_sib_byte_) { - (*size)++; - return ProcessSib(start_byte + 1, mod, size); - } else { - (*size)++; - return true; - } -} - -bool MiniDisassembler::ProcessSib(unsigned char* start_byte, - unsigned char mod, - unsigned int* size) { - // get the mod field from the 2..0 bits of the SIB byte - unsigned char sib_base = (*start_byte) & 0x07; - if (0x05 == sib_base) { - switch (mod) { - case 0x00: // mod == 00 - case 0x02: // mod == 10 - operand_bytes_ += OS_DOUBLE_WORD; - break; - case 0x01: // mod == 01 - operand_bytes_ += OS_BYTE; - break; - case 0x03: // mod == 11 - // According to the IA-32 docs, there does not seem to be a disp - // value for this value of mod - default: - break; - } - } - - (*size)++; - return true; -} - -}; // namespace sidestep diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h b/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h deleted file mode 100644 index 2c3ea2f2d5e..00000000000 --- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler.h +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Definition of MiniDisassembler. - -#ifndef TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_ -#define TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_ - -#include "sidestep/mini_disassembler_types.h" - -namespace sidestep { - -// This small disassembler is very limited -// in its functionality, and in fact does only the bare minimum required by the -// preamble patching utility. It may be useful for other purposes, however. -// -// The limitations include at least the following: -// -# No support for coprocessor opcodes, MMX, etc. -// -# No machine-readable identification of opcodes or decoding of -// assembly parameters. The name of the opcode (as a string) is given, -// however, to aid debugging. -// -// You may ask what this little disassembler actually does, then? The answer is -// that it does the following, which is exactly what the patching utility needs: -// -# Indicates if opcode is a jump (any kind) or a return (any kind) -// because this is important for the patching utility to determine if -// a function is too short or there are jumps too early in it for it -// to be preamble patched. -// -# The opcode length is always calculated, so that the patching utility -// can figure out where the next instruction starts, and whether it -// already has enough instructions to replace with the absolute jump -// to the patching code. -// -// The usage is quite simple; just create a MiniDisassembler and use its -// Disassemble() method. -// -// If you would like to extend this disassembler, please refer to the -// IA-32 Intel Architecture Software Developer's Manual Volume 2: -// Instruction Set Reference for information about operand decoding -// etc. -class MiniDisassembler { - public: - - // Creates a new instance and sets defaults. - // - // operand_default_32_bits: If true, the default operand size is - // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits. - // address_default_32_bits: If true, the default address size is - // set to 32 bits, which is the default under Win32. Otherwise it is 16 bits. - MiniDisassembler(bool operand_default_32_bits, - bool address_default_32_bits); - - // Equivalent to MiniDisassembler(true, true); - MiniDisassembler(); - - // Attempts to disassemble a single instruction starting from the - // address in memory it is pointed to. - // - // start: Address where disassembly should start. - // instruction_bytes: Variable that will be incremented by - // the length in bytes of the instruction. - // Returns enItJump, enItReturn or enItGeneric on success. enItUnknown - // if unable to disassemble, enItUnused if this seems to be an unused - // opcode. In the last two (error) cases, cbInstruction will be set - // to 0xffffffff. - // - // Postcondition: This instance of the disassembler is ready to be used again, - // with unchanged defaults from creation time. - InstructionType Disassemble(unsigned char* start, - unsigned int* instruction_bytes); - - private: - - // Makes the disassembler ready for reuse. - void Initialize(); - - // Sets the flags for address and operand sizes. - // Returns Number of prefix bytes. - InstructionType ProcessPrefixes(unsigned char* start, unsigned int* size); - - // Sets the flag for whether we have ModR/M, and increments - // operand_bytes_ if any are specifies by the opcode directly. - // Returns Number of opcode bytes. - InstructionType ProcessOpcode(unsigned char* start, - unsigned int table, - unsigned int* size); - - // Checks the type of the supplied operand. Increments - // operand_bytes_ if it directly indicates an immediate etc. - // operand. Asserts have_modrm_ if the operand specifies - // a ModR/M byte. - bool ProcessOperand(int flag_operand); - - // Increments operand_bytes_ by size specified by ModR/M and - // by SIB if present. - // Returns 0 in case of error, 1 if there is just a ModR/M byte, - // 2 if there is a ModR/M byte and a SIB byte. - bool ProcessModrm(unsigned char* start, unsigned int* size); - - // Processes the SIB byte that it is pointed to. - // start: Pointer to the SIB byte. - // mod: The mod field from the ModR/M byte. - // Returns 1 to indicate success (indicates 1 SIB byte) - bool ProcessSib(unsigned char* start, unsigned char mod, unsigned int* size); - - // The instruction type we have decoded from the opcode. - InstructionType instruction_type_; - - // Counts the number of bytes that is occupied by operands in - // the current instruction (note: we don't care about how large - // operands stored in registers etc. are). - unsigned int operand_bytes_; - - // True iff there is a ModR/M byte in this instruction. - bool have_modrm_; - - // True iff we need to decode the ModR/M byte (sometimes it just - // points to a register, we can tell by the addressing mode). - bool should_decode_modrm_; - - // Current operand size is 32 bits if true, 16 bits if false. - bool operand_is_32_bits_; - - // Default operand size is 32 bits if true, 16 bits if false. - bool operand_default_is_32_bits_; - - // Current address size is 32 bits if true, 16 bits if false. - bool address_is_32_bits_; - - // Default address size is 32 bits if true, 16 bits if false. - bool address_default_is_32_bits_; - - // Huge big opcode table based on the IA-32 manual, defined - // in Ia32OpcodeMap.cpp - static const OpcodeTable s_ia32_opcode_map_[]; - - // Somewhat smaller table to help with decoding ModR/M bytes - // when 16-bit addressing mode is being used. Defined in - // Ia32ModrmMap.cpp - static const ModrmEntry s_ia16_modrm_map_[]; - - // Somewhat smaller table to help with decoding ModR/M bytes - // when 32-bit addressing mode is being used. Defined in - // Ia32ModrmMap.cpp - static const ModrmEntry s_ia32_modrm_map_[]; - - // Indicators of whether we got certain prefixes that certain - // silly Intel instructions depend on in nonstandard ways for - // their behaviors. - bool got_f2_prefix_, got_f3_prefix_, got_66_prefix_; -}; - -}; // namespace sidestep - -#endif // TRACELINE_SIDESTEP_MINI_DISASSEMBLER_H_ diff --git a/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h b/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h deleted file mode 100644 index cb9e0062456..00000000000 --- a/chromium/tools/traceline/traceline/sidestep/mini_disassembler_types.h +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Several simple types used by the disassembler and some of the patching -// mechanisms. - -#ifndef TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_ -#define TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_ - -namespace sidestep { - -// Categories of instructions that we care about -enum InstructionType { - // This opcode is not used - IT_UNUSED, - // This disassembler does not recognize this opcode (error) - IT_UNKNOWN, - // This is not an instruction but a reference to another table - IT_REFERENCE, - // This byte is a prefix byte that we can ignore - IT_PREFIX, - // This is a prefix byte that switches to the nondefault address size - IT_PREFIX_ADDRESS, - // This is a prefix byte that switches to the nondefault operand size - IT_PREFIX_OPERAND, - // A jump or call instruction - IT_JUMP, - // A return instruction - IT_RETURN, - // Any other type of instruction (in this case we don't care what it is) - IT_GENERIC, -}; - -// Lists IA-32 operand sizes in multiples of 8 bits -enum OperandSize { - OS_ZERO = 0, - OS_BYTE = 1, - OS_WORD = 2, - OS_DOUBLE_WORD = 4, - OS_QUAD_WORD = 8, - OS_DOUBLE_QUAD_WORD = 16, - OS_32_BIT_POINTER = 32/8, - OS_48_BIT_POINTER = 48/8, - OS_SINGLE_PRECISION_FLOATING = 32/8, - OS_DOUBLE_PRECISION_FLOATING = 64/8, - OS_DOUBLE_EXTENDED_PRECISION_FLOATING = 80/8, - OS_128_BIT_PACKED_SINGLE_PRECISION_FLOATING = 128/8, - OS_PSEUDO_DESCRIPTOR = 6 -}; - -// Operand addressing methods from the IA-32 manual. The enAmMask value -// is a mask for the rest. The other enumeration values are named for the -// names given to the addressing methods in the manual, e.g. enAm_D is for -// the D addressing method. -// -// The reason we use a full 4 bytes and a mask, is that we need to combine -// these flags with the enOperandType to store the details -// on the operand in a single integer. -enum AddressingMethod { - AM_NOT_USED = 0, // This operand is not used for this instruction - AM_MASK = 0x00FF0000, // Mask for the rest of the values in this enumeration - AM_A = 0x00010000, // A addressing type - AM_C = 0x00020000, // C addressing type - AM_D = 0x00030000, // D addressing type - AM_E = 0x00040000, // E addressing type - AM_F = 0x00050000, // F addressing type - AM_G = 0x00060000, // G addressing type - AM_I = 0x00070000, // I addressing type - AM_J = 0x00080000, // J addressing type - AM_M = 0x00090000, // M addressing type - AM_O = 0x000A0000, // O addressing type - AM_P = 0x000B0000, // P addressing type - AM_Q = 0x000C0000, // Q addressing type - AM_R = 0x000D0000, // R addressing type - AM_S = 0x000E0000, // S addressing type - AM_T = 0x000F0000, // T addressing type - AM_V = 0x00100000, // V addressing type - AM_W = 0x00110000, // W addressing type - AM_X = 0x00120000, // X addressing type - AM_Y = 0x00130000, // Y addressing type - AM_REGISTER = 0x00140000, // Specific register is always used as this op - AM_IMPLICIT = 0x00150000, // An implicit, fixed value is used -}; - -// Operand types from the IA-32 manual. The enOtMask value is -// a mask for the rest. The rest of the values are named for the -// names given to these operand types in the manual, e.g. enOt_ps -// is for the ps operand type in the manual. -// -// The reason we use a full 4 bytes and a mask, is that we need -// to combine these flags with the enAddressingMethod to store the details -// on the operand in a single integer. -enum OperandType { - OT_MASK = 0xFF000000, - OT_A = 0x01000000, - OT_B = 0x02000000, - OT_C = 0x03000000, - OT_D = 0x04000000, - OT_DQ = 0x05000000, - OT_P = 0x06000000, - OT_PI = 0x07000000, - OT_PS = 0x08000000, // actually unsupported for (we don't know its size) - OT_Q = 0x09000000, - OT_S = 0x0A000000, - OT_SS = 0x0B000000, - OT_SI = 0x0C000000, - OT_V = 0x0D000000, - OT_W = 0x0E000000, - OT_SD = 0x0F000000, // scalar double-precision floating-point value - OT_PD = 0x10000000, // double-precision floating point - // dummy "operand type" for address mode M - which doesn't specify - // operand type - OT_ADDRESS_MODE_M = 0x80000000 -}; - -// Everything that's in an Opcode (see below) except the three -// alternative opcode structs for different prefixes. -struct SpecificOpcode { - // Index to continuation table, or 0 if this is the last - // byte in the opcode. - int table_index_; - - // The opcode type - InstructionType type_; - - // Description of the type of the dest, src and aux operands, - // put together from an enOperandType flag and an enAddressingMethod - // flag. - int flag_dest_; - int flag_source_; - int flag_aux_; - - // We indicate the mnemonic for debugging purposes - const char* mnemonic_; -}; - -// The information we keep in our tables about each of the different -// valid instructions recognized by the IA-32 architecture. -struct Opcode { - // Index to continuation table, or 0 if this is the last - // byte in the opcode. - int table_index_; - - // The opcode type - InstructionType type_; - - // Description of the type of the dest, src and aux operands, - // put together from an enOperandType flag and an enAddressingMethod - // flag. - int flag_dest_; - int flag_source_; - int flag_aux_; - - // We indicate the mnemonic for debugging purposes - const char* mnemonic_; - - // Alternative opcode info if certain prefixes are specified. - // In most cases, all of these are zeroed-out. Only used if - // bPrefixDependent is true. - bool is_prefix_dependent_; - SpecificOpcode opcode_if_f2_prefix_; - SpecificOpcode opcode_if_f3_prefix_; - SpecificOpcode opcode_if_66_prefix_; -}; - -// Information about each table entry. -struct OpcodeTable { - // Table of instruction entries - const Opcode* table_; - // How many bytes left to shift ModR/M byte before applying mask - unsigned char shift_; - // Mask to apply to byte being looked at before comparing to table - unsigned char mask_; - // Minimum/maximum indexes in table. - unsigned char min_lim_; - unsigned char max_lim_; -}; - -// Information about each entry in table used to decode ModR/M byte. -struct ModrmEntry { - // Is the operand encoded as bytes in the instruction (rather than - // if it's e.g. a register in which case it's just encoded in the - // ModR/M byte) - bool is_encoded_in_instruction_; - - // Is there a SIB byte? In this case we always need to decode it. - bool use_sib_byte_; - - // What is the size of the operand (only important if it's encoded - // in the instruction)? - OperandSize operand_size_; -}; - -}; // namespace sidestep - -#endif // TRACELINE_SIDESTEP_MINI_DISASSEMBLER_TYPES_H_ diff --git a/chromium/tools/traceline/traceline/stubs.asm b/chromium/tools/traceline/traceline/stubs.asm deleted file mode 100644 index d556b6bba59..00000000000 --- a/chromium/tools/traceline/traceline/stubs.asm +++ /dev/null @@ -1,132 +0,0 @@ -; Copyright (c) 2009 The Chromium Authors. All rights reserved. -; Use of this source code is governed by a BSD-style license that can be -; found in the LICENSE file. - -; This file is just a convenient place for experimenting with x86 encodings. - -BITS 32 - -; sldt to detect which processor we are running on. -sldt eax -sidt [esp] -sidt [esp+2] - -lea eax, [fs:0] - -mov eax, [fs:0x18] - -mov ebx, 0x1234567 -mov eax, 0x1234567 - -rdtsc - -push eax -pop eax - -mov eax, [ecx] -mov eax, [esp+4] -mov ebx, [esp+4] - -lock xadd [eax], eax -lock xadd [ecx], ecx -lock xadd [ecx], eax - -jmp eax -jmp edx - -lodsd - -rep stosb - -rep movsb - -mov eax, ebx -mov edx, edx - -mov eax, eax - -stosd - -add eax, eax -add edi, ecx - -and eax, 0x0000ffff -and ecx, 0x0000ffff -and edx, 0x0000ffff - -add edi, 0x12345 -add eax, 0x12345 -add ecx, 0x12345 - -push 0x12 -push BYTE 0x12 - -mov eax, [ebp+8] - -mov eax, 0x1234 -mov [fs:0], eax - -call 0x1234 - -call eax -call ecx - -add ebx, BYTE 3 -or ecx, 0xffff -or eax, 0xffff - -mov eax, [esp+24] - -movsd -movsb - -jmp blah -blah: -jmp blah - -cmp eax, 0x1234567 -cmp ecx, 0x1234567 -je NEAR blah2 -jo NEAR blah2 -blah2: - -add esp, 12 -add esp, BYTE 12 -sub esp, BYTE 12 - -cmp eax, 12 -cmp ecx, BYTE 12 - -cmp WORD [esp+6], 0x6666 - -push DWORD [edi-4] -push DWORD [edi-8] -push DWORD [edi-12] -push DWORD [edi-16] -push DWORD [edi-20] - -x: -loop x - -mov edx, [fs:0x4] - -cmp ecx, ecx -cmp ecx, ebx -cmp ebx, ebx - -mov eax,[dword fs:0x24] -mov eax,[fs:0x24] - -mov ecx,[dword fs:0x24] -mov ecx,[fs:0x24] - -mov eax, [ebx+12] -mov ebx, [ebx+12] - -cmovo eax, eax - -mov eax, eax - -xchg eax, ebx -xchg ebx, ecx -xchg ebx, [esp+4] diff --git a/chromium/tools/traceline/traceline/sym_resolver.h b/chromium/tools/traceline/traceline/sym_resolver.h deleted file mode 100644 index eb7e06c08af..00000000000 --- a/chromium/tools/traceline/traceline/sym_resolver.h +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// A smaller wrapper around the dbghelp symbol resolution routines. -// For example: -// SymResolver resolver("ntdll.dll"); -// resolver.Resolve("ntdll!NtBlahBlah"); - -#ifndef TRACELINE_SYM_RESOLVER_H_ -#define TRACELINE_SYM_RESOLVER_H_ - -#include -#include - -#include -#include -#include - -static BOOL CALLBACK SymEnumer(PCSTR name, DWORD64 base, PVOID context) { - reinterpret_cast*>(context)->push_back(base); - return TRUE; -} - -class SymResolver { - public: - - // Constructor to load a single DLL. - SymResolver(const char* dllname, HANDLE proc = ::GetCurrentProcess()) - : proc_(proc) { - - // TODO(deanm): Would be nice to get this from WinDBG, but it's buried - // in the workspace data blob... _NT_SYMBOL_PATH is not usually set... - static char* kSymbolPath = - "C:\\Program Files\\Debugging Tools for Windows (x86)\\sym;" - "C:\\Program Files\\Debugging Tools for Windows\\sym"; - - // If we want to load a specific DLL, or we want to load all. - if (::SymInitialize(proc_, kSymbolPath, dllname ? FALSE : TRUE) != TRUE) { - NOTREACHED("SymInitialize failed: %d", GetLastError()); - } - - base_ = 0; - - if (dllname) { - base_ = ::SymLoadModuleEx(proc_, - NULL, - const_cast(dllname), - NULL, - reinterpret_cast( - GetModuleHandleA(dllname)), - 0, - NULL, - 0); - if (base_ == 0) { - NOTREACHED("SymLoadModuleEx(%s) failed: %d", dllname, GetLastError()); - } - } - - std::vector bases; - // The name returned from SymEnumerateModules64 doesn't include the ext, - // so we can't differentiate between a dll and exe of the same name. So - // collect all of the base addresses and query for more info. - // The prototype changed from PSTR to PCSTR, so in order to support older - // SDKs we have to cast SymEnumer. - PSYM_ENUMMODULES_CALLBACK64 enumer = - reinterpret_cast(&SymEnumer); - if (SymEnumerateModules64(proc_, enumer, &bases) != TRUE) { - NOTREACHED("SymEnumerateModules64 failed: %d\n", GetLastError()); - } - for (size_t i = 0; i < bases.size(); ++i) { - // This was failing, turns out I was just using the system32 - // dbghelp.dll which is old, use the one from windbg :( - IMAGEHLP_MODULE64 info; - info.SizeOfStruct = sizeof(info); - if (SymGetModuleInfo64(proc_, bases[i], &info) != TRUE) { - NOTREACHED("SymGetModuleInfo64 failed: %d\n", GetLastError()); - } - std::string filename(info.ImageName); - size_t last_slash = filename.find_last_of('\\'); - if (last_slash != std::string::npos) - filename = filename.substr(filename.find_last_of('\\') + 1); - - // Map the base address to the image name... - dlls_[static_cast(bases[i])] = filename; - } - - // TODO(deanm): check the symbols are rad and stuff... - } - - char* Resolve(const char* name) { - // The API writes to the space after SYMBOL_INFO... - struct { - SYMBOL_INFO info; - char buf[128]; - } info = {0}; - - info.info.SizeOfStruct = sizeof(info.info); - info.info.ModBase = base_; - info.info.MaxNameLen = 127; - - if (SymFromName(proc_, const_cast(name), &info.info) != TRUE) { - NOTREACHED("SymFromName(%s) failed: %d", name, GetLastError()); - } - - return reinterpret_cast(info.info.Address); - } - - std::string Unresolve(int ptr) { - // The API writes to the space after SYMBOL_INFO... - struct { - SYMBOL_INFO info; - char buf[128]; - } info = {0}; - - info.info.SizeOfStruct = sizeof(info.info); - info.info.ModBase = base_; - info.info.MaxNameLen = 127; - if (!::SymFromAddr(proc_, static_cast(ptr), NULL, &info.info)) { - return std::string("failed"); - } - - std::string name; - int addr = static_cast(info.info.Address); - int base = static_cast(info.info.ModBase); - - if (dlls_.count(base) == 1) { - name.append(dlls_[base]); - } else { - name.append("unknown_mod"); - } - name.push_back('!'); - name.append(info.info.Name); - - char buf[32]; - _itoa_s(ptr - addr, buf, sizeof(buf), 16); - name.append("+0x"); - name.append(buf); - - DWORD disp; - IMAGEHLP_LINE64 line; - if (::SymGetLineFromAddr64( - proc_, static_cast(ptr), &disp, &line)) { - name.append(" [ "); - name.append(line.FileName); - name.append(":"); - _itoa_s(line.LineNumber, buf, sizeof(buf), 10); - name.append(buf); - name.append(" ]"); - } - - return name; - } - - ~SymResolver() { - if (::SymCleanup(proc_) != TRUE) { - NOTREACHED("SymCleanup failed: %d", GetLastError()); - } - } - - private: - HANDLE proc_; - ULONG64 base_; - std::map dlls_; -}; - -#endif // TRACELINE_SYM_RESOLVER_H_ diff --git a/chromium/tools/traceline/traceline/syscall_map.h b/chromium/tools/traceline/traceline/syscall_map.h deleted file mode 100644 index 515e9c7863b..00000000000 --- a/chromium/tools/traceline/traceline/syscall_map.h +++ /dev/null @@ -1,2116 +0,0 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This table is a dump of system call numbers -> function names on an XP -// system. These numbers change between kernel versions, so it's likely they -// will have to be regenerated for your system. See the idarub script. - -// Define a global map used for resolving a syscall number to name. -// Call CreateSyscallMap() to create a return a std::map -// which maps from a system call number to its function name. - -#ifndef TRACELINE_SYSCALL_MAP_H_ -#define TRACELINE_SYSCALL_MAP_H_ - -#include - -// TODO(deanm): Right now these tables are manually extracted and hardcoded -// here. It would be great (but possibly difficult) to do it on startup. We -// should at least checksum the DLLs to make sure they match. - -std::map CreateSyscallMap() { - std::map table; -if (1) { // XP table. - table[0] = "ntdll.dll!NtAcceptConnectPort"; - table[1] = "ntdll.dll!NtAccessCheck"; - table[2] = "ntdll.dll!ZwAccessCheckAndAuditAlarm"; - table[3] = "ntdll.dll!NtAccessCheckByType"; - table[4] = "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm"; - table[5] = "ntdll.dll!NtAccessCheckByTypeResultList"; - table[6] = "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm"; - table[7] = "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle"; - table[8] = "ntdll.dll!NtAddAtom"; - table[9] = "ntdll.dll!ZwAddBootEntry"; - table[10] = "ntdll.dll!ZwAdjustGroupsToken"; - table[11] = "ntdll.dll!ZwAdjustPrivilegesToken"; - table[12] = "ntdll.dll!NtAlertResumeThread"; - table[13] = "ntdll.dll!NtAlertThread"; - table[14] = "ntdll.dll!ZwAllocateLocallyUniqueId"; - table[15] = "ntdll.dll!NtAllocateUserPhysicalPages"; - table[16] = "ntdll.dll!NtAllocateUuids"; - table[17] = "ntdll.dll!NtAllocateVirtualMemory"; - table[18] = "ntdll.dll!ZwAreMappedFilesTheSame"; - table[19] = "ntdll.dll!ZwAssignProcessToJobObject"; - table[20] = "ntdll.dll!ZwCallbackReturn"; - table[21] = "ntdll.dll!NtCancelDeviceWakeupRequest"; - table[22] = "ntdll.dll!ZwCancelIoFile"; - table[23] = "ntdll.dll!ZwCancelTimer"; - table[24] = "ntdll.dll!NtClearEvent"; - table[25] = "ntdll.dll!NtClose"; - table[26] = "ntdll.dll!ZwCloseObjectAuditAlarm"; - table[27] = "ntdll.dll!NtCompactKeys"; - table[28] = "ntdll.dll!ZwCompareTokens"; - table[29] = "ntdll.dll!NtCompleteConnectPort"; - table[30] = "ntdll.dll!ZwCompressKey"; - table[31] = "ntdll.dll!NtConnectPort"; - table[32] = "ntdll.dll!ZwContinue"; - table[33] = "ntdll.dll!ZwCreateDebugObject"; - table[34] = "ntdll.dll!ZwCreateDirectoryObject"; - table[35] = "ntdll.dll!NtCreateEvent"; - table[36] = "ntdll.dll!NtCreateEventPair"; - table[37] = "ntdll.dll!NtCreateFile"; - table[38] = "ntdll.dll!NtCreateIoCompletion"; - table[39] = "ntdll.dll!ZwCreateJobObject"; - table[40] = "ntdll.dll!NtCreateJobSet"; - table[41] = "ntdll.dll!ZwCreateKey"; - table[42] = "ntdll.dll!ZwCreateMailslotFile"; - table[43] = "ntdll.dll!ZwCreateMutant"; - table[44] = "ntdll.dll!ZwCreateNamedPipeFile"; - table[45] = "ntdll.dll!NtCreatePagingFile"; - table[46] = "ntdll.dll!ZwCreatePort"; - table[47] = "ntdll.dll!ZwCreateProcess"; - table[48] = "ntdll.dll!ZwCreateProcessEx"; - table[49] = "ntdll.dll!ZwCreateProfile"; - table[50] = "ntdll.dll!NtCreateSection"; - table[51] = "ntdll.dll!NtCreateSemaphore"; - table[52] = "ntdll.dll!ZwCreateSymbolicLinkObject"; - table[53] = "ntdll.dll!NtCreateThread"; - table[54] = "ntdll.dll!ZwCreateTimer"; - table[55] = "ntdll.dll!NtCreateToken"; - table[56] = "ntdll.dll!ZwCreateWaitablePort"; - table[57] = "ntdll.dll!NtDebugActiveProcess"; - table[58] = "ntdll.dll!ZwDebugContinue"; - table[59] = "ntdll.dll!ZwDelayExecution"; - table[60] = "ntdll.dll!ZwDeleteAtom"; - table[61] = "ntdll.dll!NtDeleteBootEntry"; - table[62] = "ntdll.dll!NtDeleteFile"; - table[63] = "ntdll.dll!ZwDeleteKey"; - table[64] = "ntdll.dll!NtDeleteObjectAuditAlarm"; - table[65] = "ntdll.dll!NtDeleteValueKey"; - table[66] = "ntdll.dll!ZwDeviceIoControlFile"; - table[67] = "ntdll.dll!NtDisplayString"; - table[68] = "ntdll.dll!ZwDuplicateObject"; - table[69] = "ntdll.dll!NtDuplicateToken"; - table[70] = "ntdll.dll!ZwEnumerateBootEntries"; - table[71] = "ntdll.dll!ZwEnumerateKey"; - table[72] = "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx"; - table[73] = "ntdll.dll!NtEnumerateValueKey"; - table[74] = "ntdll.dll!ZwExtendSection"; - table[75] = "ntdll.dll!NtFilterToken"; - table[76] = "ntdll.dll!NtFindAtom"; - table[77] = "ntdll.dll!ZwFlushBuffersFile"; - table[78] = "ntdll.dll!ZwFlushInstructionCache"; - table[79] = "ntdll.dll!NtFlushKey"; - table[80] = "ntdll.dll!ZwFlushVirtualMemory"; - table[81] = "ntdll.dll!NtFlushWriteBuffer"; - table[82] = "ntdll.dll!NtFreeUserPhysicalPages"; - table[83] = "ntdll.dll!NtFreeVirtualMemory"; - table[84] = "ntdll.dll!NtFsControlFile"; - table[85] = "ntdll.dll!NtGetContextThread"; - table[86] = "ntdll.dll!NtGetDevicePowerState"; - table[87] = "ntdll.dll!ZwGetPlugPlayEvent"; - table[88] = "ntdll.dll!NtGetWriteWatch"; - table[89] = "ntdll.dll!NtImpersonateAnonymousToken"; - table[90] = "ntdll.dll!ZwImpersonateClientOfPort"; - table[91] = "ntdll.dll!ZwImpersonateThread"; - table[92] = "ntdll.dll!ZwInitializeRegistry"; - table[93] = "ntdll.dll!NtInitiatePowerAction"; - table[94] = "ntdll.dll!ZwIsProcessInJob"; - table[95] = "ntdll.dll!NtIsSystemResumeAutomatic"; - table[96] = "ntdll.dll!ZwListenPort"; - table[97] = "ntdll.dll!NtLoadDriver"; - table[98] = "ntdll.dll!NtLoadKey"; - table[99] = "ntdll.dll!NtLoadKey2"; - table[100] = "ntdll.dll!NtLockFile"; - table[101] = "ntdll.dll!ZwLockProductActivationKeys"; - table[102] = "ntdll.dll!NtLockRegistryKey"; - table[103] = "ntdll.dll!ZwLockVirtualMemory"; - table[104] = "ntdll.dll!ZwMakePermanentObject"; - table[105] = "ntdll.dll!NtMakeTemporaryObject"; - table[106] = "ntdll.dll!NtMapUserPhysicalPages"; - table[107] = "ntdll.dll!ZwMapUserPhysicalPagesScatter"; - table[108] = "ntdll.dll!ZwMapViewOfSection"; - table[109] = "ntdll.dll!NtModifyBootEntry"; - table[110] = "ntdll.dll!NtNotifyChangeDirectoryFile"; - table[111] = "ntdll.dll!NtNotifyChangeKey"; - table[112] = "ntdll.dll!NtNotifyChangeMultipleKeys"; - table[113] = "ntdll.dll!ZwOpenDirectoryObject"; - table[114] = "ntdll.dll!NtOpenEvent"; - table[115] = "ntdll.dll!NtOpenEventPair"; - table[116] = "ntdll.dll!NtOpenFile"; - table[117] = "ntdll.dll!ZwOpenIoCompletion"; - table[118] = "ntdll.dll!ZwOpenJobObject"; - table[119] = "ntdll.dll!ZwOpenKey"; - table[120] = "ntdll.dll!NtOpenMutant"; - table[121] = "ntdll.dll!ZwOpenObjectAuditAlarm"; - table[122] = "ntdll.dll!ZwOpenProcess"; - table[123] = "ntdll.dll!ZwOpenProcessToken"; - table[124] = "ntdll.dll!ZwOpenProcessTokenEx"; - table[125] = "ntdll.dll!NtOpenSection"; - table[126] = "ntdll.dll!NtOpenSemaphore"; - table[127] = "ntdll.dll!NtOpenSymbolicLinkObject"; - table[128] = "ntdll.dll!ZwOpenThread"; - table[129] = "ntdll.dll!NtOpenThreadToken"; - table[130] = "ntdll.dll!NtOpenThreadTokenEx"; - table[131] = "ntdll.dll!ZwOpenTimer"; - table[132] = "ntdll.dll!NtPlugPlayControl"; - table[133] = "ntdll.dll!ZwPowerInformation"; - table[134] = "ntdll.dll!ZwPrivilegeCheck"; - table[135] = "ntdll.dll!ZwPrivilegeObjectAuditAlarm"; - table[136] = "ntdll.dll!NtPrivilegedServiceAuditAlarm"; - table[137] = "ntdll.dll!ZwProtectVirtualMemory"; - table[138] = "ntdll.dll!ZwPulseEvent"; - table[139] = "ntdll.dll!ZwQueryAttributesFile"; - table[140] = "ntdll.dll!ZwQueryBootEntryOrder"; - table[141] = "ntdll.dll!ZwQueryBootOptions"; - table[142] = "ntdll.dll!NtQueryDebugFilterState"; - table[143] = "ntdll.dll!NtQueryDefaultLocale"; - table[144] = "ntdll.dll!ZwQueryDefaultUILanguage"; - table[145] = "ntdll.dll!ZwQueryDirectoryFile"; - table[146] = "ntdll.dll!ZwQueryDirectoryObject"; - table[147] = "ntdll.dll!ZwQueryEaFile"; - table[148] = "ntdll.dll!NtQueryEvent"; - table[149] = "ntdll.dll!ZwQueryFullAttributesFile"; - table[150] = "ntdll.dll!NtQueryInformationAtom"; - table[151] = "ntdll.dll!ZwQueryInformationFile"; - table[152] = "ntdll.dll!ZwQueryInformationJobObject"; - table[153] = "ntdll.dll!ZwQueryInformationPort"; - table[154] = "ntdll.dll!ZwQueryInformationProcess"; - table[155] = "ntdll.dll!NtQueryInformationThread"; - table[156] = "ntdll.dll!ZwQueryInformationToken"; - table[157] = "ntdll.dll!NtQueryInstallUILanguage"; - table[158] = "ntdll.dll!NtQueryIntervalProfile"; - table[159] = "ntdll.dll!NtQueryIoCompletion"; - table[160] = "ntdll.dll!ZwQueryKey"; - table[161] = "ntdll.dll!NtQueryMultipleValueKey"; - table[162] = "ntdll.dll!NtQueryMutant"; - table[163] = "ntdll.dll!NtQueryObject"; - table[164] = "ntdll.dll!NtQueryOpenSubKeys"; - table[165] = "ntdll.dll!NtQueryPerformanceCounter"; - table[166] = "ntdll.dll!ZwQueryQuotaInformationFile"; - table[167] = "ntdll.dll!ZwQuerySection"; - table[168] = "ntdll.dll!NtQuerySecurityObject"; - table[169] = "ntdll.dll!ZwQuerySemaphore"; - table[170] = "ntdll.dll!ZwQuerySymbolicLinkObject"; - table[171] = "ntdll.dll!ZwQuerySystemEnvironmentValue"; - table[172] = "ntdll.dll!ZwQuerySystemEnvironmentValueEx"; - table[173] = "ntdll.dll!NtQuerySystemInformation"; - table[174] = "ntdll.dll!NtQuerySystemTime"; - table[175] = "ntdll.dll!ZwQueryTimer"; - table[176] = "ntdll.dll!NtQueryTimerResolution"; - table[177] = "ntdll.dll!ZwQueryValueKey"; - table[178] = "ntdll.dll!NtQueryVirtualMemory"; - table[179] = "ntdll.dll!NtQueryVolumeInformationFile"; - table[180] = "ntdll.dll!NtQueueApcThread"; - table[181] = "ntdll.dll!ZwRaiseException"; - table[182] = "ntdll.dll!ZwRaiseHardError"; - table[183] = "ntdll.dll!NtReadFile"; - table[184] = "ntdll.dll!NtReadFileScatter"; - table[185] = "ntdll.dll!ZwReadRequestData"; - table[186] = "ntdll.dll!NtReadVirtualMemory"; - table[187] = "ntdll.dll!ZwRegisterThreadTerminatePort"; - table[188] = "ntdll.dll!ZwReleaseMutant"; - table[189] = "ntdll.dll!NtReleaseSemaphore"; - table[190] = "ntdll.dll!ZwRemoveIoCompletion"; - table[191] = "ntdll.dll!ZwRemoveProcessDebug"; - table[192] = "ntdll.dll!ZwRenameKey"; - table[193] = "ntdll.dll!ZwReplaceKey"; - table[194] = "ntdll.dll!ZwReplyPort"; - table[195] = "ntdll.dll!NtReplyWaitReceivePort"; - table[196] = "ntdll.dll!NtReplyWaitReceivePortEx"; - table[197] = "ntdll.dll!NtReplyWaitReplyPort"; - table[198] = "ntdll.dll!ZwRequestDeviceWakeup"; - table[199] = "ntdll.dll!ZwRequestPort"; - table[200] = "ntdll.dll!NtRequestWaitReplyPort"; - table[201] = "ntdll.dll!ZwRequestWakeupLatency"; - table[202] = "ntdll.dll!NtResetEvent"; - table[203] = "ntdll.dll!ZwResetWriteWatch"; - table[204] = "ntdll.dll!NtRestoreKey"; - table[205] = "ntdll.dll!ZwResumeProcess"; - table[206] = "ntdll.dll!ZwResumeThread"; - table[207] = "ntdll.dll!NtSaveKey"; - table[208] = "ntdll.dll!NtSaveKeyEx"; - table[209] = "ntdll.dll!NtSaveMergedKeys"; - table[210] = "ntdll.dll!NtSecureConnectPort"; - table[211] = "ntdll.dll!ZwSetBootEntryOrder"; - table[212] = "ntdll.dll!ZwSetBootOptions"; - table[213] = "ntdll.dll!ZwSetContextThread"; - table[214] = "ntdll.dll!NtSetDebugFilterState"; - table[215] = "ntdll.dll!NtSetDefaultHardErrorPort"; - table[216] = "ntdll.dll!NtSetDefaultLocale"; - table[217] = "ntdll.dll!ZwSetDefaultUILanguage"; - table[218] = "ntdll.dll!ZwSetEaFile"; - table[219] = "ntdll.dll!NtSetEvent"; - table[220] = "ntdll.dll!NtSetEventBoostPriority"; - table[221] = "ntdll.dll!NtSetHighEventPair"; - table[222] = "ntdll.dll!NtSetHighWaitLowEventPair"; - table[223] = "ntdll.dll!ZwSetInformationDebugObject"; - table[224] = "ntdll.dll!ZwSetInformationFile"; - table[225] = "ntdll.dll!ZwSetInformationJobObject"; - table[226] = "ntdll.dll!ZwSetInformationKey"; - table[227] = "ntdll.dll!ZwSetInformationObject"; - table[228] = "ntdll.dll!ZwSetInformationProcess"; - table[229] = "ntdll.dll!ZwSetInformationThread"; - table[230] = "ntdll.dll!ZwSetInformationToken"; - table[231] = "ntdll.dll!NtSetIntervalProfile"; - table[232] = "ntdll.dll!NtSetIoCompletion"; - table[233] = "ntdll.dll!ZwSetLdtEntries"; - table[234] = "ntdll.dll!ZwSetLowEventPair"; - table[235] = "ntdll.dll!ZwSetLowWaitHighEventPair"; - table[236] = "ntdll.dll!ZwSetQuotaInformationFile"; - table[237] = "ntdll.dll!NtSetSecurityObject"; - table[238] = "ntdll.dll!ZwSetSystemEnvironmentValue"; - table[239] = "ntdll.dll!ZwSetSystemEnvironmentValueEx"; - table[240] = "ntdll.dll!ZwSetSystemInformation"; - table[241] = "ntdll.dll!ZwSetSystemPowerState"; - table[242] = "ntdll.dll!ZwSetSystemTime"; - table[243] = "ntdll.dll!ZwSetThreadExecutionState"; - table[244] = "ntdll.dll!ZwSetTimer"; - table[245] = "ntdll.dll!NtSetTimerResolution"; - table[246] = "ntdll.dll!ZwSetUuidSeed"; - table[247] = "ntdll.dll!ZwSetValueKey"; - table[248] = "ntdll.dll!NtSetVolumeInformationFile"; - table[249] = "ntdll.dll!ZwShutdownSystem"; - table[250] = "ntdll.dll!ZwSignalAndWaitForSingleObject"; - table[251] = "ntdll.dll!NtStartProfile"; - table[252] = "ntdll.dll!ZwStopProfile"; - table[253] = "ntdll.dll!ZwSuspendProcess"; - table[254] = "ntdll.dll!ZwSuspendThread"; - table[255] = "ntdll.dll!NtSystemDebugControl"; - table[256] = "ntdll.dll!ZwTerminateJobObject"; - table[257] = "ntdll.dll!ZwTerminateProcess"; - table[258] = "ntdll.dll!ZwTerminateThread"; - table[259] = "ntdll.dll!NtTestAlert"; - table[260] = "ntdll.dll!NtTraceEvent"; - table[261] = "ntdll.dll!NtTranslateFilePath"; - table[262] = "ntdll.dll!ZwUnloadDriver"; - table[263] = "ntdll.dll!NtUnloadKey"; - table[264] = "ntdll.dll!ZwUnloadKeyEx"; - table[265] = "ntdll.dll!ZwUnlockFile"; - table[266] = "ntdll.dll!NtUnlockVirtualMemory"; - table[267] = "ntdll.dll!NtUnmapViewOfSection"; - table[268] = "ntdll.dll!NtVdmControl"; - table[269] = "ntdll.dll!NtWaitForDebugEvent"; - table[270] = "ntdll.dll!NtWaitForMultipleObjects"; - table[271] = "ntdll.dll!ZwWaitForSingleObject"; - table[272] = "ntdll.dll!ZwWaitHighEventPair"; - table[273] = "ntdll.dll!NtWaitLowEventPair"; - table[274] = "ntdll.dll!NtWriteFile"; - table[275] = "ntdll.dll!NtWriteFileGather"; - table[276] = "ntdll.dll!NtWriteRequestData"; - table[277] = "ntdll.dll!NtWriteVirtualMemory"; - table[278] = "ntdll.dll!ZwYieldExecution"; - table[279] = "ntdll.dll!ZwCreateKeyedEvent"; - table[280] = "ntdll.dll!NtOpenKeyedEvent"; - table[281] = "ntdll.dll!NtReleaseKeyedEvent"; - table[282] = "ntdll.dll!NtWaitForKeyedEvent"; - table[283] = "ntdll.dll!ZwQueryPortInformationProcess"; - table[4096] = "gdi32.dll!NtGdiAbortDoc"; - table[4097] = "gdi32.dll!NtGdiAbortPath"; - table[4098] = "gdi32.dll!NtGdiAddFontResourceW"; - table[4099] = "gdi32.dll!NtGdiAddRemoteFontToDC"; - table[4100] = "gdi32.dll!NtGdiAddFontMemResourceEx"; - table[4101] = "gdi32.dll!NtGdiRemoveMergeFont"; - table[4102] = "gdi32.dll!NtGdiAddRemoteMMInstanceToDC"; - table[4103] = "gdi32.dll!NtGdiAlphaBlend"; - table[4104] = "gdi32.dll!NtGdiAngleArc"; - table[4105] = "gdi32.dll!NtGdiAnyLinkedFonts"; - table[4106] = "gdi32.dll!NtGdiFontIsLinked"; - table[4107] = "gdi32.dll!NtGdiArcInternal"; - table[4108] = "gdi32.dll!NtGdiBeginPath"; - table[4109] = "gdi32.dll!NtGdiBitBlt"; - table[4110] = "gdi32.dll!NtGdiCancelDC"; - table[4111] = "gdi32.dll!NtGdiCheckBitmapBits"; - table[4112] = "gdi32.dll!NtGdiCloseFigure"; - table[4113] = "gdi32.dll!NtGdiClearBitmapAttributes"; - table[4114] = "gdi32.dll!NtGdiClearBrushAttributes"; - table[4115] = "gdi32.dll!NtGdiColorCorrectPalette"; - table[4116] = "gdi32.dll!NtGdiCombineRgn"; - table[4117] = "gdi32.dll!CombineTransform"; - table[4118] = "gdi32.dll!NtGdiComputeXformCoefficients"; - table[4119] = "gdi32.dll!NtGdiConsoleTextOut"; - table[4120] = "gdi32.dll!NtGdiConvertMetafileRect"; - table[4121] = "gdi32.dll!NtGdiCreateBitmap"; - table[4122] = "gdi32.dll!NtGdiCreateClientObj"; - table[4123] = "gdi32.dll!NtGdiCreateColorSpace"; - table[4124] = "gdi32.dll!NtGdiCreateColorTransform"; - table[4125] = "gdi32.dll!NtGdiCreateCompatibleBitmap"; - table[4126] = "gdi32.dll!NtGdiCreateCompatibleDC"; - table[4127] = "gdi32.dll!NtGdiCreateDIBBrush"; - table[4128] = "gdi32.dll!NtGdiCreateDIBitmapInternal"; - table[4129] = "gdi32.dll!NtGdiCreateDIBSection"; - table[4130] = "gdi32.dll!NtGdiCreateEllipticRgn"; - table[4131] = "gdi32.dll!NtGdiCreateHalftonePalette"; - table[4132] = "gdi32.dll!NtGdiCreateHatchBrushInternal"; - table[4133] = "gdi32.dll!NtGdiCreateMetafileDC"; - table[4134] = "gdi32.dll!NtGdiCreatePaletteInternal"; - table[4135] = "gdi32.dll!NtGdiCreatePatternBrushInternal"; - table[4136] = "gdi32.dll!CreatePen"; - table[4137] = "gdi32.dll!NtGdiCreateRectRgn"; - table[4138] = "gdi32.dll!CreateRoundRectRgn"; - table[4139] = "gdi32.dll!NtGdiCreateServerMetaFile"; - table[4140] = "gdi32.dll!NtGdiCreateSolidBrush"; - table[4141] = "gdi32.dll!NtGdiD3dContextCreate"; - table[4142] = "gdi32.dll!NtGdiD3dContextDestroy"; - table[4143] = "gdi32.dll!NtGdiD3dContextDestroyAll"; - table[4144] = "gdi32.dll!NtGdiD3dValidateTextureStageState"; - table[4145] = "gdi32.dll!NtGdiD3dDrawPrimitives2"; - table[4146] = "gdi32.dll!NtGdiDdGetDriverState"; - table[4147] = "gdi32.dll!NtGdiDdAddAttachedSurface"; - table[4148] = "gdi32.dll!NtGdiDdAlphaBlt"; - table[4149] = "gdi32.dll!NtGdiDdAttachSurface"; - table[4150] = "gdi32.dll!NtGdiDdBeginMoCompFrame"; - table[4151] = "gdi32.dll!NtGdiDdBlt"; - table[4152] = "gdi32.dll!NtGdiDdCanCreateSurface"; - table[4153] = "gdi32.dll!NtGdiDdCanCreateD3DBuffer"; - table[4154] = "gdi32.dll!NtGdiDdColorControl"; - table[4155] = "gdi32.dll!NtGdiDdCreateDirectDrawObject"; - table[4156] = "gdi32.dll!NtGdiDdCreateSurface"; - table[4157] = "gdi32.dll!NtGdiDdCreateD3DBuffer"; - table[4158] = "gdi32.dll!NtGdiDdCreateMoComp"; - table[4159] = "gdi32.dll!NtGdiDdCreateSurfaceObject"; - table[4160] = "gdi32.dll!NtGdiDdDeleteDirectDrawObject"; - table[4161] = "gdi32.dll!NtGdiDdDeleteSurfaceObject"; - table[4162] = "gdi32.dll!NtGdiDdDestroyMoComp"; - table[4163] = "gdi32.dll!NtGdiDdDestroySurface"; - table[4164] = "gdi32.dll!NtGdiDdDestroyD3DBuffer"; - table[4165] = "gdi32.dll!NtGdiDdEndMoCompFrame"; - table[4166] = "gdi32.dll!NtGdiDdFlip"; - table[4167] = "gdi32.dll!NtGdiDdFlipToGDISurface"; - table[4168] = "gdi32.dll!NtGdiDdGetAvailDriverMemory"; - table[4169] = "gdi32.dll!NtGdiDdGetBltStatus"; - table[4170] = "gdi32.dll!NtGdiDdGetDC"; - table[4171] = "gdi32.dll!NtGdiDdGetDriverInfo"; - table[4172] = "gdi32.dll!NtGdiDdGetDxHandle"; - table[4173] = "gdi32.dll!NtGdiDdGetFlipStatus"; - table[4174] = "gdi32.dll!NtGdiDdGetInternalMoCompInfo"; - table[4175] = "gdi32.dll!NtGdiDdGetMoCompBuffInfo"; - table[4176] = "gdi32.dll!NtGdiDdGetMoCompGuids"; - table[4177] = "gdi32.dll!NtGdiDdGetMoCompFormats"; - table[4178] = "gdi32.dll!NtGdiDdGetScanLine"; - table[4179] = "gdi32.dll!NtGdiDdLock"; - table[4180] = "gdi32.dll!NtGdiDdLockD3D"; - table[4181] = "gdi32.dll!NtGdiDdQueryDirectDrawObject"; - table[4182] = "gdi32.dll!NtGdiDdQueryMoCompStatus"; - table[4183] = "gdi32.dll!NtGdiDdReenableDirectDrawObject"; - table[4184] = "gdi32.dll!NtGdiDdReleaseDC"; - table[4185] = "gdi32.dll!NtGdiDdRenderMoComp"; - table[4186] = "gdi32.dll!NtGdiDdResetVisrgn"; - table[4187] = "gdi32.dll!NtGdiDdSetColorKey"; - table[4188] = "gdi32.dll!NtGdiDdSetExclusiveMode"; - table[4189] = "gdi32.dll!NtGdiDdSetGammaRamp"; - table[4190] = "gdi32.dll!NtGdiDdCreateSurfaceEx"; - table[4191] = "gdi32.dll!NtGdiDdSetOverlayPosition"; - table[4192] = "gdi32.dll!NtGdiDdUnattachSurface"; - table[4193] = "gdi32.dll!NtGdiDdUnlock"; - table[4194] = "gdi32.dll!NtGdiDdUnlockD3D"; - table[4195] = "gdi32.dll!NtGdiDdUpdateOverlay"; - table[4196] = "gdi32.dll!NtGdiDdWaitForVerticalBlank"; - table[4197] = "gdi32.dll!NtGdiDvpCanCreateVideoPort"; - table[4198] = "gdi32.dll!NtGdiDvpColorControl"; - table[4199] = "gdi32.dll!NtGdiDvpCreateVideoPort"; - table[4200] = "gdi32.dll!NtGdiDvpDestroyVideoPort"; - table[4201] = "gdi32.dll!NtGdiDvpFlipVideoPort"; - table[4202] = "gdi32.dll!NtGdiDvpGetVideoPortBandwidth"; - table[4203] = "gdi32.dll!NtGdiDvpGetVideoPortField"; - table[4204] = "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus"; - table[4205] = "gdi32.dll!NtGdiDvpGetVideoPortInputFormats"; - table[4206] = "gdi32.dll!NtGdiDvpGetVideoPortLine"; - table[4207] = "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats"; - table[4208] = "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo"; - table[4209] = "gdi32.dll!NtGdiDvpGetVideoSignalStatus"; - table[4210] = "gdi32.dll!NtGdiDvpUpdateVideoPort"; - table[4211] = "gdi32.dll!NtGdiDvpWaitForVideoPortSync"; - table[4212] = "gdi32.dll!NtGdiDvpAcquireNotification"; - table[4213] = "gdi32.dll!NtGdiDvpReleaseNotification"; - table[4214] = "gdi32.dll!NtGdiDxgGenericThunk"; - table[4215] = "gdi32.dll!NtGdiDeleteClientObj"; - table[4216] = "gdi32.dll!NtGdiDeleteColorSpace"; - table[4217] = "gdi32.dll!NtGdiDeleteColorTransform"; - table[4218] = "gdi32.dll!DeleteObject"; - table[4219] = "gdi32.dll!NtGdiDescribePixelFormat"; - table[4220] = "gdi32.dll!NtGdiGetPerBandInfo"; - table[4221] = "gdi32.dll!NtGdiDoBanding"; - table[4222] = "gdi32.dll!NtGdiDoPalette"; - table[4223] = "gdi32.dll!NtGdiDrawEscape"; - table[4224] = "gdi32.dll!NtGdiEllipse"; - table[4225] = "gdi32.dll!NtGdiEnableEudc"; - table[4226] = "gdi32.dll!NtGdiEndDoc"; - table[4227] = "gdi32.dll!NtGdiEndPage"; - table[4228] = "gdi32.dll!NtGdiEndPath"; - table[4229] = "gdi32.dll!NtGdiEnumFontChunk"; - table[4230] = "gdi32.dll!NtGdiEnumFontClose"; - table[4231] = "gdi32.dll!NtGdiEnumFontOpen"; - table[4232] = "gdi32.dll!NtGdiEnumObjects"; - table[4233] = "gdi32.dll!NtGdiEqualRgn"; - table[4234] = "gdi32.dll!NtGdiEudcLoadUnloadLink"; - table[4235] = "gdi32.dll!NtGdiExcludeClipRect"; - table[4236] = "gdi32.dll!NtGdiExtCreatePen"; - table[4237] = "gdi32.dll!NtGdiExtCreateRegion"; - table[4238] = "gdi32.dll!NtGdiExtEscape"; - table[4239] = "gdi32.dll!NtGdiExtFloodFill"; - table[4240] = "gdi32.dll!NtGdiExtGetObjectW"; - table[4241] = "gdi32.dll!ExtSelectClipRgn"; - table[4242] = "gdi32.dll!NtGdiExtTextOutW"; - table[4243] = "gdi32.dll!NtGdiFillPath"; - table[4244] = "gdi32.dll!NtGdiFillRgn"; - table[4245] = "gdi32.dll!NtGdiFlattenPath"; - table[4247] = "gdi32.dll!NtGdiFlush"; - table[4248] = "gdi32.dll!NtGdiForceUFIMapping"; - table[4249] = "gdi32.dll!NtGdiFrameRgn"; - table[4250] = "gdi32.dll!NtGdiFullscreenControl"; - table[4251] = "gdi32.dll!NtGdiGetAndSetDCDword"; - table[4252] = "gdi32.dll!GetClipBox"; - table[4253] = "gdi32.dll!GetBitmapBits"; - table[4254] = "gdi32.dll!NtGdiGetBitmapDimension"; - table[4255] = "gdi32.dll!NtGdiGetBoundsRect"; - table[4256] = "gdi32.dll!NtGdiGetCharABCWidthsW"; - table[4257] = "gdi32.dll!NtGdiGetCharacterPlacementW"; - table[4258] = "gdi32.dll!NtGdiGetCharSet"; - table[4259] = "gdi32.dll!NtGdiGetCharWidthW"; - table[4260] = "gdi32.dll!NtGdiGetCharWidthInfo"; - table[4261] = "gdi32.dll!NtGdiGetColorAdjustment"; - table[4263] = "gdi32.dll!NtGdiGetDCDword"; - table[4264] = "gdi32.dll!NtGdiGetDCforBitmap"; - table[4265] = "gdi32.dll!NtGdiGetDCObject"; - table[4266] = "gdi32.dll!NtGdiGetDCPoint"; - table[4267] = "gdi32.dll!NtGdiGetDeviceCaps"; - table[4268] = "gdi32.dll!NtGdiGetDeviceGammaRamp"; - table[4269] = "gdi32.dll!NtGdiGetDeviceCapsAll"; - table[4270] = "gdi32.dll!NtGdiGetDIBitsInternal"; - table[4271] = "gdi32.dll!NtGdiGetETM"; - table[4272] = "gdi32.dll!NtGdiGetEudcTimeStampEx"; - table[4273] = "gdi32.dll!GetFontData"; - table[4274] = "gdi32.dll!NtGdiGetFontResourceInfoInternalW"; - table[4275] = "gdi32.dll!NtGdiGetGlyphIndicesW"; - table[4276] = "gdi32.dll!NtGdiGetGlyphIndicesWInternal"; - table[4277] = "gdi32.dll!NtGdiGetGlyphOutline"; - table[4278] = "gdi32.dll!NtGdiGetKerningPairs"; - table[4279] = "gdi32.dll!NtGdiGetLinkedUFIs"; - table[4280] = "gdi32.dll!GetMiterLimit"; - table[4281] = "gdi32.dll!NtGdiGetMonitorID"; - table[4282] = "gdi32.dll!GetNearestColor"; - table[4283] = "gdi32.dll!NtGdiGetNearestPaletteIndex"; - table[4284] = "gdi32.dll!NtGdiGetObjectBitmapHandle"; - table[4285] = "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW"; - table[4286] = "gdi32.dll!NtGdiGetPath"; - table[4287] = "gdi32.dll!NtGdiGetPixel"; - table[4288] = "gdi32.dll!NtGdiGetRandomRgn"; - table[4289] = "gdi32.dll!GetRasterizerCaps"; - table[4290] = "gdi32.dll!NtGdiGetRealizationInfo"; - table[4291] = "gdi32.dll!GetRegionData"; - table[4292] = "gdi32.dll!NtGdiGetRgnBox"; - table[4293] = "gdi32.dll!NtGdiGetServerMetaFileBits"; - table[4294] = "gdi32.dll!NtGdiGetSpoolMessage"; - table[4296] = "gdi32.dll!NtGdiGetStockObject"; - table[4297] = "gdi32.dll!NtGdiGetStringBitmapW"; - table[4298] = "gdi32.dll!GetSystemPaletteUse"; - table[4299] = "gdi32.dll!NtGdiGetTextCharsetInfo"; - table[4300] = "gdi32.dll!NtGdiGetTextExtent"; - table[4301] = "gdi32.dll!NtGdiGetTextExtentExW"; - table[4302] = "gdi32.dll!NtGdiGetTextFaceW"; - table[4303] = "gdi32.dll!NtGdiGetTextMetricsW"; - table[4304] = "gdi32.dll!NtGdiGetTransform"; - table[4305] = "gdi32.dll!NtGdiGetUFI"; - table[4306] = "gdi32.dll!NtGdiGetEmbUFI"; - table[4307] = "gdi32.dll!NtGdiGetUFIPathname"; - table[4308] = "gdi32.dll!NtGdiGetEmbedFonts"; - table[4309] = "gdi32.dll!NtGdiChangeGhostFont"; - table[4310] = "gdi32.dll!NtGdiAddEmbFontToDC"; - table[4311] = "gdi32.dll!NtGdiGetFontUnicodeRanges"; - table[4312] = "gdi32.dll!NtGdiGetWidthTable"; - table[4313] = "gdi32.dll!NtGdiGradientFill"; - table[4314] = "gdi32.dll!NtGdiHfontCreate"; - table[4315] = "gdi32.dll!NtGdiIcmBrushInfo"; - table[4316] = "gdi32.dll!NtGdiInit"; - table[4317] = "gdi32.dll!NtGdiInitSpool"; - table[4318] = "gdi32.dll!NtGdiIntersectClipRect"; - table[4319] = "gdi32.dll!NtGdiInvertRgn"; - table[4320] = "gdi32.dll!NtGdiLineTo"; - table[4321] = "gdi32.dll!NtGdiMakeFontDir"; - table[4322] = "gdi32.dll!NtGdiMakeInfoDC"; - table[4323] = "gdi32.dll!NtGdiMaskBlt"; - table[4324] = "gdi32.dll!NtGdiModifyWorldTransform"; - table[4325] = "gdi32.dll!NtGdiMonoBitmap"; - table[4327] = "gdi32.dll!NtGdiOffsetClipRgn"; - table[4328] = "gdi32.dll!NtGdiOffsetRgn"; - table[4329] = "gdi32.dll!NtGdiOpenDCW"; - table[4330] = "gdi32.dll!NtGdiPatBlt"; - table[4331] = "gdi32.dll!NtGdiPolyPatBlt"; - table[4332] = "gdi32.dll!NtGdiPathToRegion"; - table[4333] = "gdi32.dll!NtGdiPlgBlt"; - table[4334] = "gdi32.dll!NtGdiPolyDraw"; - table[4335] = "gdi32.dll!NtGdiPolyPolyDraw"; - table[4336] = "gdi32.dll!NtGdiPolyTextOutW"; - table[4337] = "gdi32.dll!NtGdiPtInRegion"; - table[4338] = "gdi32.dll!NtGdiPtVisible"; - table[4339] = "gdi32.dll!NtGdiQueryFonts"; - table[4340] = "gdi32.dll!NtGdiQueryFontAssocInfo"; - table[4341] = "gdi32.dll!NtGdiRectangle"; - table[4342] = "gdi32.dll!NtGdiRectInRegion"; - table[4343] = "gdi32.dll!RectVisible"; - table[4344] = "gdi32.dll!NtGdiRemoveFontResourceW"; - table[4345] = "gdi32.dll!NtGdiRemoveFontMemResourceEx"; - table[4346] = "gdi32.dll!NtGdiResetDC"; - table[4347] = "gdi32.dll!NtGdiResizePalette"; - table[4348] = "gdi32.dll!NtGdiRestoreDC"; - table[4349] = "gdi32.dll!NtGdiRoundRect"; - table[4350] = "gdi32.dll!NtGdiSaveDC"; - table[4351] = "gdi32.dll!NtGdiScaleViewportExtEx"; - table[4352] = "gdi32.dll!NtGdiScaleWindowExtEx"; - table[4353] = "gdi32.dll!NtGdiSelectBitmap"; - table[4355] = "gdi32.dll!NtGdiSelectClipPath"; - table[4356] = "gdi32.dll!NtGdiSelectFont"; - table[4357] = "gdi32.dll!NtGdiSelectPen"; - table[4358] = "gdi32.dll!NtGdiSetBitmapAttributes"; - table[4359] = "gdi32.dll!SetBitmapBits"; - table[4360] = "gdi32.dll!NtGdiSetBitmapDimension"; - table[4361] = "gdi32.dll!NtGdiSetBoundsRect"; - table[4362] = "gdi32.dll!NtGdiSetBrushAttributes"; - table[4363] = "gdi32.dll!NtGdiSetBrushOrg"; - table[4364] = "gdi32.dll!NtGdiSetColorAdjustment"; - table[4365] = "gdi32.dll!NtGdiSetColorSpace"; - table[4366] = "gdi32.dll!NtGdiSetDeviceGammaRamp"; - table[4367] = "gdi32.dll!NtGdiSetDIBitsToDeviceInternal"; - table[4368] = "gdi32.dll!NtGdiSetFontEnumeration"; - table[4369] = "gdi32.dll!NtGdiSetFontXform"; - table[4370] = "gdi32.dll!NtGdiSetIcmMode"; - table[4371] = "gdi32.dll!NtGdiSetLinkedUFIs"; - table[4372] = "gdi32.dll!NtGdiSetMagicColors"; - table[4373] = "gdi32.dll!NtGdiSetMetaRgn"; - table[4374] = "gdi32.dll!NtGdiSetMiterLimit"; - table[4375] = "gdi32.dll!NtGdiGetDeviceWidth"; - table[4376] = "gdi32.dll!NtGdiMirrorWindowOrg"; - table[4377] = "gdi32.dll!NtGdiSetLayout"; - table[4378] = "gdi32.dll!NtGdiSetPixel"; - table[4379] = "gdi32.dll!NtGdiSetPixelFormat"; - table[4380] = "gdi32.dll!NtGdiSetRectRgn"; - table[4381] = "gdi32.dll!NtGdiSetSystemPaletteUse"; - table[4383] = "gdi32.dll!NtGdiSetupPublicCFONT"; - table[4384] = "gdi32.dll!NtGdiSetVirtualResolution"; - table[4385] = "gdi32.dll!NtGdiSetSizeDevice"; - table[4386] = "gdi32.dll!NtGdiStartDoc"; - table[4387] = "gdi32.dll!NtGdiStartPage"; - table[4388] = "gdi32.dll!NtGdiStretchBlt"; - table[4389] = "gdi32.dll!NtGdiStretchDIBitsInternal"; - table[4390] = "gdi32.dll!NtGdiStrokeAndFillPath"; - table[4391] = "gdi32.dll!NtGdiStrokePath"; - table[4392] = "gdi32.dll!NtGdiSwapBuffers"; - table[4393] = "gdi32.dll!NtGdiTransformPoints"; - table[4394] = "gdi32.dll!NtGdiTransparentBlt"; - table[4395] = "gdi32.dll!NtGdiUnloadPrinterDriver"; - table[4397] = "gdi32.dll!NtGdiUnrealizeObject"; - table[4398] = "gdi32.dll!NtGdiUpdateColors"; - table[4399] = "gdi32.dll!NtGdiWidenPath"; - table[4400] = "user32.dll!NtUserActivateKeyboardLayout"; - table[4401] = "user32.dll!NtUserAlterWindowStyle"; - table[4402] = "imm32.dll!NtUserAssociateInputContext"; - table[4403] = "user32.dll!NtUserAttachThreadInput"; - table[4404] = "user32.dll!NtUserBeginPaint"; - table[4405] = "user32.dll!NtUserBitBltSysBmp"; - table[4406] = "user32.dll!NtUserBlockInput"; - table[4407] = "imm32.dll!NtUserBuildHimcList"; - table[4408] = "user32.dll!NtUserBuildHwndList"; - table[4409] = "user32.dll!NtUserBuildNameList"; - table[4410] = "user32.dll!NtUserBuildPropList"; - table[4411] = "user32.dll!NtUserCallHwnd"; - table[4412] = "user32.dll!NtUserCallHwndLock"; - table[4413] = "user32.dll!NtUserCallHwndOpt"; - table[4414] = "user32.dll!NtUserCallHwndParam"; - table[4415] = "user32.dll!NtUserCallHwndParamLock"; - table[4416] = "user32.dll!NtUserCallMsgFilter"; - table[4417] = "user32.dll!NtUserCallNextHookEx"; - table[4418] = "user32.dll!NtUserCallNoParam"; - table[4419] = "imm32.dll!NtUserCallOneParam"; - table[4419] = "user32.dll!NtUserCallOneParam"; - table[4420] = "user32.dll!NtUserCallTwoParam"; - table[4421] = "user32.dll!NtUserChangeClipboardChain"; - table[4422] = "user32.dll!NtUserChangeDisplaySettings"; - table[4424] = "user32.dll!NtUserCheckMenuItem"; - table[4425] = "user32.dll!NtUserChildWindowFromPointEx"; - table[4426] = "user32.dll!NtUserClipCursor"; - table[4427] = "user32.dll!NtUserCloseClipboard"; - table[4428] = "user32.dll!NtUserCloseDesktop"; - table[4429] = "user32.dll!NtUserCloseWindowStation"; - table[4431] = "user32.dll!NtUserConvertMemHandle"; - table[4432] = "user32.dll!NtUserCopyAcceleratorTable"; - table[4433] = "user32.dll!NtUserCountClipboardFormats"; - table[4434] = "user32.dll!NtUserCreateAcceleratorTable"; - table[4435] = "user32.dll!NtUserCreateCaret"; - table[4436] = "user32.dll!NtUserCreateDesktop"; - table[4437] = "imm32.dll!NtUserCreateInputContext"; - table[4438] = "user32.dll!NtUserCreateLocalMemHandle"; - table[4439] = "user32.dll!NtUserCreateWindowEx"; - table[4440] = "user32.dll!NtUserCreateWindowStation"; - table[4441] = "user32.dll!NtUserDdeGetQualityOfService"; - table[4442] = "user32.dll!NtUserDdeInitialize"; - table[4443] = "user32.dll!NtUserDdeSetQualityOfService"; - table[4444] = "user32.dll!NtUserDeferWindowPos"; - table[4445] = "user32.dll!NtUserDefSetText"; - table[4446] = "user32.dll!NtUserDeleteMenu"; - table[4447] = "user32.dll!DestroyAcceleratorTable"; - table[4448] = "user32.dll!NtUserDestroyCursor"; - table[4449] = "imm32.dll!NtUserDestroyInputContext"; - table[4450] = "user32.dll!NtUserDestroyMenu"; - table[4451] = "user32.dll!NtUserDestroyWindow"; - table[4452] = "imm32.dll!NtUserDisableThreadIme"; - table[4453] = "user32.dll!NtUserDispatchMessage"; - table[4454] = "user32.dll!NtUserDragDetect"; - table[4455] = "user32.dll!NtUserDragObject"; - table[4456] = "user32.dll!NtUserDrawAnimatedRects"; - table[4457] = "user32.dll!NtUserDrawCaption"; - table[4458] = "user32.dll!NtUserDrawCaptionTemp"; - table[4459] = "user32.dll!NtUserDrawIconEx"; - table[4460] = "user32.dll!NtUserDrawMenuBarTemp"; - table[4461] = "user32.dll!NtUserEmptyClipboard"; - table[4462] = "user32.dll!NtUserEnableMenuItem"; - table[4463] = "user32.dll!NtUserEnableScrollBar"; - table[4464] = "user32.dll!NtUserEndDeferWindowPosEx"; - table[4465] = "user32.dll!NtUserEndMenu"; - table[4466] = "user32.dll!NtUserEndPaint"; - table[4467] = "user32.dll!NtUserEnumDisplayDevices"; - table[4468] = "user32.dll!NtUserEnumDisplayMonitors"; - table[4469] = "user32.dll!NtUserEnumDisplaySettings"; - table[4470] = "user32.dll!NtUserEvent"; - table[4471] = "user32.dll!NtUserExcludeUpdateRgn"; - table[4472] = "user32.dll!NtUserFillWindow"; - table[4473] = "user32.dll!NtUserFindExistingCursorIcon"; - table[4474] = "user32.dll!NtUserFindWindowEx"; - table[4475] = "user32.dll!NtUserFlashWindowEx"; - table[4476] = "user32.dll!NtUserGetAltTabInfo"; - table[4477] = "user32.dll!NtUserGetAncestor"; - table[4478] = "imm32.dll!NtUserGetAppImeLevel"; - table[4479] = "user32.dll!GetAsyncKeyState"; - table[4480] = "user32.dll!NtUserGetAtomName"; - table[4481] = "user32.dll!NtUserGetCaretBlinkTime"; - table[4482] = "user32.dll!NtUserGetCaretPos"; - table[4483] = "user32.dll!NtUserGetClassInfo"; - table[4484] = "user32.dll!NtUserGetClassName"; - table[4485] = "user32.dll!NtUserGetClipboardData"; - table[4486] = "user32.dll!NtUserGetClipboardFormatName"; - table[4487] = "user32.dll!NtUserGetClipboardOwner"; - table[4488] = "user32.dll!NtUserGetClipboardSequenceNumber"; - table[4489] = "user32.dll!NtUserGetClipboardViewer"; - table[4490] = "user32.dll!NtUserGetClipCursor"; - table[4491] = "user32.dll!NtUserGetComboBoxInfo"; - table[4492] = "user32.dll!NtUserGetControlBrush"; - table[4493] = "user32.dll!NtUserGetControlColor"; - table[4494] = "user32.dll!NtUserGetCPD"; - table[4495] = "user32.dll!NtUserGetCursorFrameInfo"; - table[4496] = "user32.dll!NtUserGetCursorInfo"; - table[4497] = "user32.dll!NtUserGetDC"; - table[4498] = "user32.dll!NtUserGetDCEx"; - table[4499] = "user32.dll!NtUserGetDoubleClickTime"; - table[4500] = "user32.dll!NtUserGetForegroundWindow"; - table[4501] = "user32.dll!NtUserGetGuiResources"; - table[4502] = "user32.dll!NtUserGetGUIThreadInfo"; - table[4503] = "user32.dll!NtUserGetIconInfo"; - table[4504] = "user32.dll!NtUserGetIconSize"; - table[4505] = "imm32.dll!NtUserGetImeHotKey"; - table[4505] = "user32.dll!NtUserGetImeHotKey"; - table[4506] = "imm32.dll!NtUserGetImeInfoEx"; - table[4507] = "user32.dll!NtUserGetInternalWindowPos"; - table[4508] = "user32.dll!NtUserGetKeyboardLayoutList"; - table[4509] = "user32.dll!NtUserGetKeyboardLayoutName"; - table[4510] = "user32.dll!NtUserGetKeyboardState"; - table[4511] = "user32.dll!NtUserGetKeyNameText"; - table[4512] = "user32.dll!NtUserGetKeyState"; - table[4513] = "user32.dll!NtUserGetListBoxInfo"; - table[4514] = "user32.dll!NtUserGetMenuBarInfo"; - table[4515] = "user32.dll!NtUserGetMenuIndex"; - table[4516] = "user32.dll!NtUserGetMenuItemRect"; - table[4517] = "user32.dll!NtUserGetMessage"; - table[4518] = "user32.dll!NtUserGetMouseMovePointsEx"; - table[4519] = "user32.dll!NtUserGetObjectInformation"; - table[4520] = "user32.dll!NtUserGetOpenClipboardWindow"; - table[4521] = "user32.dll!NtUserGetPriorityClipboardFormat"; - table[4522] = "user32.dll!NtUserGetProcessWindowStation"; - table[4523] = "user32.dll!NtUserGetRawInputBuffer"; - table[4524] = "user32.dll!NtUserGetRawInputData"; - table[4525] = "user32.dll!NtUserGetRawInputDeviceInfo"; - table[4526] = "user32.dll!NtUserGetRawInputDeviceList"; - table[4527] = "user32.dll!NtUserGetRegisteredRawInputDevices"; - table[4528] = "user32.dll!NtUserGetScrollBarInfo"; - table[4529] = "user32.dll!NtUserGetSystemMenu"; - table[4530] = "user32.dll!NtUserGetThreadDesktop"; - table[4531] = "imm32.dll!NtUserGetThreadState"; - table[4531] = "user32.dll!NtUserGetThreadState"; - table[4532] = "user32.dll!NtUserGetTitleBarInfo"; - table[4533] = "user32.dll!GetUpdateRect"; - table[4534] = "user32.dll!GetUpdateRgn"; - table[4535] = "user32.dll!NtUserGetWindowDC"; - table[4536] = "user32.dll!NtUserGetWindowPlacement"; - table[4537] = "user32.dll!NtUserGetWOWClass"; - table[4539] = "user32.dll!NtUserHideCaret"; - table[4540] = "user32.dll!NtUserHiliteMenuItem"; - table[4541] = "user32.dll!NtUserImpersonateDdeClientWindow"; - table[4543] = "user32.dll!NtUserInitializeClientPfnArrays"; - table[4544] = "user32.dll!NtUserInitTask"; - table[4545] = "user32.dll!NtUserInternalGetWindowText"; - table[4546] = "user32.dll!NtUserInvalidateRect"; - table[4547] = "user32.dll!NtUserInvalidateRgn"; - table[4548] = "user32.dll!NtUserIsClipboardFormatAvailable"; - table[4549] = "user32.dll!NtUserKillTimer"; - table[4550] = "user32.dll!NtUserLoadKeyboardLayoutEx"; - table[4551] = "user32.dll!NtUserLockWindowStation"; - table[4552] = "user32.dll!NtUserLockWindowUpdate"; - table[4553] = "user32.dll!NtUserLockWorkStation"; - table[4554] = "user32.dll!NtUserMapVirtualKeyEx"; - table[4555] = "user32.dll!NtUserMenuItemFromPoint"; - table[4556] = "user32.dll!NtUserMessageCall"; - table[4557] = "user32.dll!NtUserMinMaximize"; - table[4558] = "user32.dll!NtUserMNDragLeave"; - table[4559] = "user32.dll!NtUserMNDragOver"; - table[4560] = "user32.dll!NtUserModifyUserStartupInfoFlags"; - table[4561] = "user32.dll!NtUserMoveWindow"; - table[4562] = "imm32.dll!NtUserNotifyIMEStatus"; - table[4562] = "user32.dll!NtUserNotifyIMEStatus"; - table[4564] = "user32.dll!NtUserNotifyWinEvent"; - table[4565] = "user32.dll!NtUserOpenClipboard"; - table[4566] = "user32.dll!NtUserOpenDesktop"; - table[4567] = "user32.dll!NtUserOpenInputDesktop"; - table[4568] = "user32.dll!NtUserOpenWindowStation"; - table[4569] = "user32.dll!NtUserPaintDesktop"; - table[4570] = "user32.dll!PeekMessageW"; - table[4571] = "user32.dll!NtUserPostMessage"; - table[4572] = "user32.dll!NtUserPostThreadMessage"; - table[4573] = "user32.dll!NtUserPrintWindow"; - table[4574] = "user32.dll!NtUserProcessConnect"; - table[4576] = "imm32.dll!NtUserQueryInputContext"; - table[4577] = "user32.dll!NtUserQuerySendMessage"; - table[4578] = "user32.dll!NtUserQueryUserCounters"; - table[4579] = "imm32.dll!NtUserQueryWindow"; - table[4579] = "user32.dll!NtUserQueryWindow"; - table[4580] = "user32.dll!NtUserRealChildWindowFromPoint"; - table[4581] = "user32.dll!NtUserRealInternalGetMessage"; - table[4582] = "user32.dll!NtUserRealWaitMessageEx"; - table[4583] = "user32.dll!NtUserRedrawWindow"; - table[4584] = "user32.dll!NtUserRegisterClassExWOW"; - table[4585] = "user32.dll!NtUserRegisterUserApiHook"; - table[4586] = "user32.dll!NtUserRegisterHotKey"; - table[4587] = "user32.dll!NtUserRegisterRawInputDevices"; - table[4588] = "user32.dll!NtUserRegisterTasklist"; - table[4589] = "user32.dll!NtUserRegisterWindowMessage"; - table[4590] = "user32.dll!NtUserRemoveMenu"; - table[4591] = "user32.dll!NtUserRemoveProp"; - table[4593] = "user32.dll!NtUserResolveDesktopForWOW"; - table[4594] = "user32.dll!NtUserSBGetParms"; - table[4595] = "user32.dll!ScrollDC"; - table[4596] = "user32.dll!NtUserScrollWindowEx"; - table[4597] = "gdi32.dll!NtUserSelectPalette"; - table[4598] = "user32.dll!NtUserSendInput"; - table[4599] = "user32.dll!NtUserSetActiveWindow"; - table[4600] = "imm32.dll!NtUserSetAppImeLevel"; - table[4601] = "user32.dll!NtUserSetCapture"; - table[4602] = "user32.dll!NtUserSetClassLong"; - table[4603] = "user32.dll!NtUserSetClassWord"; - table[4604] = "user32.dll!NtUserSetClipboardData"; - table[4605] = "user32.dll!NtUserSetClipboardViewer"; - table[4606] = "user32.dll!NtUserSetConsoleReserveKeys"; - table[4607] = "user32.dll!NtUserSetCursor"; - table[4608] = "user32.dll!NtUserSetCursorContents"; - table[4609] = "user32.dll!NtUserSetCursorIconData"; - table[4610] = "user32.dll!NtUserSetDbgTag"; - table[4611] = "user32.dll!NtUserSetFocus"; - table[4612] = "user32.dll!NtUserSetImeHotKey"; - table[4613] = "imm32.dll!NtUserSetImeInfoEx"; - table[4614] = "user32.dll!NtUserSetImeOwnerWindow"; - table[4616] = "user32.dll!NtUserSetInformationThread"; - table[4617] = "user32.dll!NtUserSetInternalWindowPos"; - table[4618] = "user32.dll!NtUserSetKeyboardState"; - table[4619] = "user32.dll!NtUserSetLogonNotifyWindow"; - table[4620] = "user32.dll!NtUserSetMenu"; - table[4621] = "user32.dll!NtUserSetMenuContextHelpId"; - table[4622] = "user32.dll!NtUserSetMenuDefaultItem"; - table[4623] = "user32.dll!NtUserSetMenuFlagRtoL"; - table[4624] = "user32.dll!NtUserSetObjectInformation"; - table[4625] = "user32.dll!NtUserSetParent"; - table[4626] = "user32.dll!NtUserSetProcessWindowStation"; - table[4627] = "user32.dll!NtUserSetProp"; - table[4628] = "user32.dll!NtUserSetRipFlags"; - table[4629] = "user32.dll!NtUserSetScrollInfo"; - table[4630] = "user32.dll!NtUserSetShellWindowEx"; - table[4631] = "user32.dll!NtUserSetSysColors"; - table[4632] = "user32.dll!NtUserSetSystemCursor"; - table[4633] = "user32.dll!NtUserSetSystemMenu"; - table[4634] = "user32.dll!NtUserSetSystemTimer"; - table[4635] = "user32.dll!NtUserSetThreadDesktop"; - table[4636] = "imm32.dll!NtUserSetThreadLayoutHandles"; - table[4637] = "user32.dll!NtUserSetThreadState"; - table[4638] = "user32.dll!NtUserSetTimer"; - table[4639] = "user32.dll!NtUserSetWindowFNID"; - table[4640] = "user32.dll!NtUserSetWindowLong"; - table[4641] = "user32.dll!NtUserSetWindowPlacement"; - table[4642] = "user32.dll!NtUserSetWindowPos"; - table[4643] = "user32.dll!NtUserSetWindowRgn"; - table[4644] = "user32.dll!NtUserSetWindowsHookAW"; - table[4645] = "user32.dll!NtUserSetWindowsHookEx"; - table[4646] = "user32.dll!NtUserSetWindowStationUser"; - table[4647] = "user32.dll!NtUserSetWindowWord"; - table[4648] = "user32.dll!NtUserSetWinEventHook"; - table[4649] = "user32.dll!NtUserShowCaret"; - table[4650] = "user32.dll!NtUserShowScrollBar"; - table[4651] = "user32.dll!NtUserShowWindow"; - table[4652] = "user32.dll!NtUserShowWindowAsync"; - table[4654] = "user32.dll!NtUserSwitchDesktop"; - table[4655] = "user32.dll!NtUserSystemParametersInfo"; - table[4657] = "user32.dll!NtUserThunkedMenuInfo"; - table[4658] = "user32.dll!NtUserThunkedMenuItemInfo"; - table[4659] = "user32.dll!NtUserToUnicodeEx"; - table[4660] = "user32.dll!NtUserTrackMouseEvent"; - table[4661] = "user32.dll!NtUserTrackPopupMenuEx"; - table[4662] = "user32.dll!NtUserCalcMenuBar"; - table[4663] = "user32.dll!NtUserPaintMenuBar"; - table[4664] = "user32.dll!TranslateAcceleratorA"; - table[4665] = "user32.dll!NtUserTranslateMessage"; - table[4666] = "user32.dll!NtUserUnhookWindowsHookEx"; - table[4667] = "user32.dll!NtUserUnhookWinEvent"; - table[4668] = "user32.dll!NtUserUnloadKeyboardLayout"; - table[4669] = "user32.dll!NtUserUnlockWindowStation"; - table[4670] = "user32.dll!NtUserUnregisterClass"; - table[4671] = "user32.dll!NtUserUnregisterUserApiHook"; - table[4672] = "user32.dll!NtUserUnregisterHotKey"; - table[4673] = "imm32.dll!NtUserUpdateInputContext"; - table[4673] = "user32.dll!NtUserUpdateInputContext"; - table[4674] = "user32.dll!NtUserUpdateInstance"; - table[4675] = "user32.dll!NtUserUpdateLayeredWindow"; - table[4676] = "user32.dll!NtUserGetLayeredWindowAttributes"; - table[4677] = "user32.dll!NtUserSetLayeredWindowAttributes"; - table[4678] = "user32.dll!NtUserUpdatePerUserSystemParameters"; - table[4679] = "user32.dll!NtUserUserHandleGrantAccess"; - table[4680] = "imm32.dll!NtUserValidateHandleSecure"; - table[4680] = "user32.dll!NtUserValidateHandleSecure"; - table[4681] = "user32.dll!NtUserValidateRect"; - table[4682] = "user32.dll!NtUserValidateTimerCallback"; - table[4683] = "user32.dll!NtUserVkKeyScanEx"; - table[4684] = "user32.dll!NtUserWaitForInputIdle"; - table[4685] = "user32.dll!NtUserWaitForMsgAndEvent"; - table[4686] = "user32.dll!NtUserWaitMessage"; - table[4687] = "user32.dll!NtUserWin32PoolAllocationStats"; - table[4688] = "user32.dll!NtUserWindowFromPoint"; - table[4689] = "user32.dll!NtUserYieldTask"; - table[4695] = "gdi32.dll!NtGdiEngAssociateSurface"; - table[4696] = "gdi32.dll!NtGdiEngCreateBitmap"; - table[4697] = "gdi32.dll!NtGdiEngCreateDeviceSurface"; - table[4698] = "gdi32.dll!NtGdiEngCreateDeviceBitmap"; - table[4699] = "gdi32.dll!NtGdiEngCreatePalette"; - table[4700] = "gdi32.dll!NtGdiEngComputeGlyphSet"; - table[4701] = "gdi32.dll!NtGdiEngCopyBits"; - table[4702] = "gdi32.dll!NtGdiEngDeletePalette"; - table[4703] = "gdi32.dll!NtGdiEngDeleteSurface"; - table[4704] = "gdi32.dll!NtGdiEngEraseSurface"; - table[4705] = "gdi32.dll!NtGdiEngUnlockSurface"; - table[4706] = "gdi32.dll!NtGdiEngLockSurface"; - table[4707] = "gdi32.dll!NtGdiEngBitBlt"; - table[4708] = "gdi32.dll!NtGdiEngStretchBlt"; - table[4709] = "gdi32.dll!NtGdiEngPlgBlt"; - table[4710] = "gdi32.dll!NtGdiEngMarkBandingSurface"; - table[4711] = "gdi32.dll!NtGdiEngStrokePath"; - table[4712] = "gdi32.dll!NtGdiEngFillPath"; - table[4713] = "gdi32.dll!NtGdiEngStrokeAndFillPath"; - table[4714] = "gdi32.dll!NtGdiEngPaint"; - table[4715] = "gdi32.dll!NtGdiEngLineTo"; - table[4716] = "gdi32.dll!NtGdiEngAlphaBlend"; - table[4717] = "gdi32.dll!NtGdiEngGradientFill"; - table[4718] = "gdi32.dll!NtGdiEngTransparentBlt"; - table[4719] = "gdi32.dll!NtGdiEngTextOut"; - table[4720] = "gdi32.dll!NtGdiEngStretchBltROP"; - table[4721] = "gdi32.dll!NtGdiXLATEOBJ_cGetPalette"; - table[4722] = "gdi32.dll!NtGdiXLATEOBJ_iXlate"; - table[4723] = "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform"; - table[4724] = "gdi32.dll!NtGdiCLIPOBJ_bEnum"; - table[4725] = "gdi32.dll!NtGdiCLIPOBJ_cEnumStart"; - table[4726] = "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath"; - table[4727] = "gdi32.dll!NtGdiEngDeletePath"; - table[4728] = "gdi32.dll!NtGdiEngCreateClip"; - table[4729] = "gdi32.dll!NtGdiEngDeleteClip"; - table[4730] = "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor"; - table[4731] = "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush"; - table[4732] = "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush"; - table[4733] = "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform"; - table[4734] = "gdi32.dll!NtGdiXFORMOBJ_bApplyXform"; - table[4735] = "gdi32.dll!NtGdiXFORMOBJ_iGetXform"; - table[4736] = "gdi32.dll!NtGdiFONTOBJ_vGetInfo"; - table[4737] = "gdi32.dll!NtGdiFONTOBJ_pxoGetXform"; - table[4738] = "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs"; - table[4739] = "gdi32.dll!NtGdiFONTOBJ_pifi"; - table[4740] = "gdi32.dll!NtGdiFONTOBJ_pfdg"; - table[4741] = "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs"; - table[4742] = "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile"; - table[4743] = "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles"; - table[4744] = "gdi32.dll!NtGdiSTROBJ_bEnum"; - table[4745] = "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly"; - table[4746] = "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths"; - table[4747] = "gdi32.dll!NtGdiSTROBJ_vEnumStart"; - table[4748] = "gdi32.dll!NtGdiSTROBJ_dwGetCodePage"; - table[4749] = "gdi32.dll!NtGdiPATHOBJ_vGetBounds"; - table[4750] = "gdi32.dll!NtGdiPATHOBJ_bEnum"; - table[4751] = "gdi32.dll!NtGdiPATHOBJ_vEnumStart"; - table[4752] = "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines"; - table[4753] = "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines"; - table[4754] = "gdi32.dll!NtGdiGetDhpdev"; - table[4755] = "gdi32.dll!NtGdiEngCheckAbort"; - table[4756] = "gdi32.dll!NtGdiHT_Get8BPPFormatPalette"; - table[4757] = "gdi32.dll!NtGdiHT_Get8BPPMaskPalette"; - table[4758] = "gdi32.dll!NtGdiUpdateTransform"; - table[4759] = "gdi32.dll!NtGdiSetPUMPDOBJ"; - table[4760] = "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush"; - table[4761] = "gdi32.dll!NtGdiUMPDEngFreeUserMem"; - table[4762] = "gdi32.dll!NtGdiDrawStream"; -} else { // Vista table. - table[4272] = "gdi32.dll!NtGdiGetDeviceCaps"; - table[4220] = "gdi32.dll!NtGdiDeleteObjectApp"; - table[4249] = "gdi32.dll!NtGdiFlush"; - table[4120] = "gdi32.dll!NtGdiConsoleTextOut"; - table[4825] = "gdi32.dll!NtGdiDdDDIEscape"; - table[4299] = "gdi32.dll!GetRgnBox"; - table[4828] = "gdi32.dll!NtGdiDdDDIGetPresentHistory"; - table[4835] = "gdi32.dll!NtGdiDdDDIGetDeviceState"; - table[4850] = "gdi32.dll!NtGdiDdDDICheckExclusiveOwnership"; - table[4849] = "gdi32.dll!NtGdiDdDDICheckMonitorPowerState"; - table[4833] = "gdi32.dll!NtGdiDdDDIWaitForVerticalBlankEvent"; - table[4298] = "gdi32.dll!GetRegionData"; - table[4796] = "gdi32.dll!NtGdiDwmGetDirtyRgn"; - table[4820] = "gdi32.dll!NtGdiDdDDIRender"; - table[4819] = "gdi32.dll!NtGdiDdDDIPresent"; - table[4815] = "gdi32.dll!NtGdiDdDDIUnlock"; - table[4814] = "gdi32.dll!NtGdiDdDDILock"; - table[4240] = "gdi32.dll!NtGdiExtCreateRegion"; - table[4339] = "gdi32.dll!NtGdiPolyPatBlt"; - table[4361] = "gdi32.dll!NtGdiSelectBitmap"; - table[4127] = "gdi32.dll!NtGdiCreateCompatibleDC"; - table[4142] = "gdi32.dll!NtGdiCreateSolidBrush"; - table[4122] = "gdi32.dll!CreateBitmap"; - table[4303] = "gdi32.dll!CreateBitmap"; - table[4348] = "gdi32.dll!NtGdiQueryFontAssocInfo"; - table[4126] = "gdi32.dll!NtGdiCreateCompatibleBitmap"; - table[4109] = "gdi32.dll!NtGdiBitBlt"; - table[4243] = "gdi32.dll!NtGdiExtGetObjectW"; - table[4270] = "gdi32.dll!NtGdiGetDCObject"; - table[4620] = "gdi32.dll!NtUserSelectPalette"; - table[4338] = "gdi32.dll!NtGdiPatBlt"; - table[4275] = "gdi32.dll!NtGdiGetDIBitsInternal"; - table[4398] = "gdi32.dll!NtGdiStretchDIBitsInternal"; - table[4130] = "gdi32.dll!NtGdiCreateDIBSection"; - table[4356] = "gdi32.dll!NtGdiRestoreDC"; - table[4358] = "gdi32.dll!NtGdiSaveDC"; - table[4103] = "gdi32.dll!NtGdiAlphaBlend"; - table[4349] = "gdi32.dll!NtGdiRectangle"; - table[4295] = "gdi32.dll!NtGdiGetRandomRgn"; - table[4244] = "gdi32.dll!NtGdiExtSelectClipRgn"; - table[4268] = "gdi32.dll!NtGdiGetDCDword"; - table[4245] = "gdi32.dll!NtGdiExtTextOutW"; - table[4254] = "gdi32.dll!GetClipBox"; - table[4397] = "gdi32.dll!NtGdiStretchBlt"; - table[4331] = "gdi32.dll!NtGdiMaskBlt"; - table[4324] = "gdi32.dll!NtGdiInit"; - table[4262] = "gdi32.dll!NtGdiGetCharSet"; - table[4336] = "gdi32.dll!NtGdiOffsetRgn"; - table[4326] = "gdi32.dll!NtGdiIntersectClipRect"; - table[4795] = "gdi32.dll!NtGdiDrawStream"; - table[4364] = "gdi32.dll!NtGdiSelectFont"; - table[4116] = "gdi32.dll!NtGdiCombineRgn"; - table[4238] = "gdi32.dll!NtGdiExcludeClipRect"; - table[4802] = "gdi32.dll!NtGdiDdDDISetAllocationPriority"; - table[4798] = "gdi32.dll!NtGdiDdDDICreateAllocation"; - table[4801] = "gdi32.dll!NtGdiDdDDIDestroyAllocation"; - table[4797] = "gdi32.dll!NtGdiDwmGetSurfaceData"; - table[4140] = "gdi32.dll!CreateRoundRectRgn"; - table[4840] = "gdi32.dll!NtGdiDdDDISetProcessSchedulingPriorityClass"; - table[4307] = "gdi32.dll!NtGdiGetTextCharsetInfo"; - table[4351] = "gdi32.dll!RectVisible"; - table[4139] = "gdi32.dll!NtGdiCreateRectRgn"; - table[4369] = "gdi32.dll!NtGdiSetBoundsRect"; - table[4257] = "gdi32.dll!NtGdiGetBoundsRect"; - table[4309] = "gdi32.dll!NtGdiGetTextExtentExW"; - table[4402] = "gdi32.dll!NtGdiTransformPoints"; - table[4118] = "gdi32.dll!NtGdiComputeXformCoefficients"; - table[4337] = "gdi32.dll!NtGdiOpenDCW"; - table[4813] = "gdi32.dll!NtGdiDdDDIQueryAdapterInfo"; - table[4822] = "gdi32.dll!NtGdiDdDDIOpenAdapterFromHdc"; - table[4816] = "gdi32.dll!NtGdiDdDDIGetDisplayModeList"; - table[4823] = "gdi32.dll!NtGdiDdDDICloseAdapter"; - table[4804] = "gdi32.dll!NtGdiDdDDICreateDevice"; - table[4806] = "gdi32.dll!NtGdiDdDDICreateContext"; - table[4271] = "gdi32.dll!NtGdiGetDCPoint"; - table[4225] = "gdi32.dll!NtGdiDoPalette"; - table[4288] = "gdi32.dll!GetNearestColor"; - table[4129] = "gdi32.dll!NtGdiCreateDIBitmapInternal"; - table[4322] = "gdi32.dll!NtGdiHfontCreate"; - table[4137] = "gdi32.dll!NtGdiCreatePatternBrushInternal"; - table[4136] = "gdi32.dll!NtGdiCreatePaletteInternal"; - table[4132] = "gdi32.dll!NtGdiCreateHalftonePalette"; - table[4375] = "gdi32.dll!NtGdiSetDIBitsToDeviceInternal"; - table[4269] = "gdi32.dll!NtGdiGetDCforBitmap"; - table[4392] = "gdi32.dll!NtGdiSetupPublicCFONT"; - table[4836] = "gdi32.dll!NtGdiDdDDICreateDCFromMemory"; - table[4264] = "gdi32.dll!NtGdiGetCharWidthInfo"; - table[4367] = "gdi32.dll!SetBitmapBits"; - table[4255] = "gdi32.dll!GetBitmapBits"; - table[4311] = "gdi32.dll!NtGdiGetTextMetricsW"; - table[4297] = "gdi32.dll!NtGdiGetRealizationInfo"; - table[4310] = "gdi32.dll!NtGdiGetTextFaceW"; - table[4292] = "gdi32.dll!NtGdiGetOutlineTextMetricsInternalW"; - table[4280] = "gdi32.dll!NtGdiGetGlyphIndicesW"; - table[4320] = "gdi32.dll!NtGdiGetWidthTable"; - table[4234] = "gdi32.dll!NtGdiEnumFontOpen"; - table[4233] = "gdi32.dll!NtGdiEnumFontClose"; - table[4232] = "gdi32.dll!NtGdiEnumFontChunk"; - table[4260] = "gdi32.dll!NtGdiGetCharABCWidthsW"; - table[4105] = "gdi32.dll!NtGdiAnyLinkedFonts"; - table[4278] = "gdi32.dll!NtGdiGetFontData"; - table[4106] = "gdi32.dll!NtGdiFontIsLinked"; - table[4332] = "gdi32.dll!NtGdiModifyWorldTransform"; - table[4312] = "gdi32.dll!NtGdiGetTransform"; - table[4321] = "gdi32.dll!NtGdiGradientFill"; - table[4294] = "gdi32.dll!NtGdiGetPixel"; - table[4403] = "gdi32.dll!NtGdiTransparentBlt"; - table[4319] = "gdi32.dll!NtGdiGetFontUnicodeRanges"; - table[4817] = "gdi32.dll!NtGdiDdDDISetDisplayMode"; - table[4827] = "gdi32.dll!NtGdiDdDDISetVidPnSourceOwner"; - table[4273] = "gdi32.dll!NtGdiGetDeviceGammaRamp"; - table[4374] = "gdi32.dll!NtGdiSetDeviceGammaRamp"; - table[4366] = "gdi32.dll!NtGdiSetBitmapAttributes"; - table[4098] = "gdi32.dll!NtGdiAddFontResourceW"; - table[4376] = "gdi32.dll!NtGdiSetFontEnumeration"; - table[4228] = "gdi32.dll!NtGdiEnableEudc"; - table[4343] = "gdi32.dll!NtGdiPolyPolyDraw"; - table[4328] = "gdi32.dll!NtGdiLineTo"; - table[4138] = "gdi32.dll!NtGdiCreatePen"; - table[4236] = "gdi32.dll!EqualRgn"; - table[4805] = "gdi32.dll!NtGdiDdDDIDestroyDevice"; - table[4807] = "gdi32.dll!NtGdiDdDDIDestroyContext"; - table[4799] = "gdi32.dll!NtGdiDdDDIQueryResourceInfo"; - table[4800] = "gdi32.dll!NtGdiDdDDIOpenResource"; - table[4838] = "gdi32.dll!NtGdiDdDDISetContextSchedulingPriority"; - table[4263] = "gdi32.dll!NtGdiGetCharWidthW"; - table[4837] = "gdi32.dll!NtGdiDdDDIDestroyDCFromMemory"; - table[4803] = "gdi32.dll!NtGdiDdDDIQueryAllocationResidency"; - table[4824] = "gdi32.dll!NtGdiDdDDIGetSharedPrimaryHandle"; - table[4385] = "gdi32.dll!NtGdiSetLayout"; - table[4371] = "gdi32.dll!NtGdiSetBrushOrg"; - table[4157] = "gdi32.dll!NtGdiDdCreateDirectDrawObject"; - table[4128] = "gdi32.dll!NtGdiCreateDIBBrush"; - table[4387] = "gdi32.dll!NtGdiSetPixel"; - table[4345] = "gdi32.dll!PtInRegion"; - table[4821] = "gdi32.dll!NtGdiDdDDIOpenAdapterFromDeviceName"; - table[4253] = "gdi32.dll!NtGdiGetAndSetDCDword"; - table[4274] = "gdi32.dll!NtGdiGetDeviceCapsAll"; - table[4247] = "gdi32.dll!NtGdiFillRgn"; - table[4289] = "gdi32.dll!GetNearestPaletteIndex"; - table[4378] = "gdi32.dll!NtGdiSetIcmMode"; - table[4327] = "gdi32.dll!NtGdiInvertRgn"; - table[4792] = "gdi32.dll!NtGdiSetPUMPDOBJ"; - table[4735] = "gdi32.dll!NtGdiEngDeletePalette"; - table[4732] = "gdi32.dll!NtGdiEngCreatePalette"; - table[4241] = "gdi32.dll!NtGdiExtEscape"; - table[4217] = "gdi32.dll!NtGdiDeleteClientObj"; - table[4123] = "gdi32.dll!NtGdiCreateClientObj"; - table[4354] = "gdi32.dll!NtGdiResetDC"; - table[4235] = "gdi32.dll!NtGdiEnumObjects"; - table[4135] = "gdi32.dll!NtGdiCreateOPMProtectedOutputs"; - table[4222] = "gdi32.dll!NtGdiDestroyOPMProtectedOutput"; - table[4258] = "gdi32.dll!NtGdiGetCertificate"; - table[4259] = "gdi32.dll!NtGdiGetCertificateSize"; - table[4291] = "gdi32.dll!NtGdiGetOPMRandomNumber"; - table[4305] = "gdi32.dll!NtGdiGetSuggestedOPMProtectedOutputArraySize"; - table[4386] = "gdi32.dll!NtGdiSetOPMSigningKeyAndSequenceNumbers"; - table[4844] = "gdi32.dll!NtGdiDdDDISetQueuedLimit"; - table[4341] = "gdi32.dll!NtGdiPlgBlt"; - table[4117] = "gdi32.dll!CombineTransform"; - table[4134] = "gdi32.dll!NtGdiCreateMetafileDC"; - table[4393] = "gdi32.dll!NtGdiSetVirtualResolution"; - table[4394] = "gdi32.dll!NtGdiSetSizeDevice"; - table[4381] = "gdi32.dll!NtGdiSetMetaRgn"; - table[4382] = "gdi32.dll!NtGdiSetMiterLimit"; - table[4377] = "gdi32.dll!NtGdiSetFontXform"; - table[4333] = "gdi32.dll!NtGdiMonoBitmap"; - table[4768] = "gdi32.dll!NtGdiXFORMOBJ_iGetXform"; - table[4770] = "gdi32.dll!NtGdiFONTOBJ_pxoGetXform"; - table[4239] = "gdi32.dll!NtGdiExtCreatePen"; - table[4286] = "gdi32.dll!GetMiterLimit"; - table[4290] = "gdi32.dll!NtGdiGetObjectBitmapHandle"; - table[4287] = "gdi32.dll!NtGdiGetMonitorID"; - table[4284] = "gdi32.dll!NtGdiGetKerningPairs"; - table[4357] = "gdi32.dll!NtGdiRoundRect"; - table[4242] = "gdi32.dll!NtGdiExtFloodFill"; - table[4306] = "gdi32.dll!GetSystemPaletteUse"; - table[4096] = "gdi32.dll!NtGdiAbortDoc"; - table[4097] = "gdi32.dll!NtGdiAbortPath"; - table[4099] = "gdi32.dll!NtGdiAddRemoteFontToDC"; - table[4100] = "gdi32.dll!NtGdiAddFontMemResourceEx"; - table[4101] = "gdi32.dll!NtGdiRemoveMergeFont"; - table[4102] = "gdi32.dll!NtGdiAddRemoteMMInstanceToDC"; - table[4104] = "gdi32.dll!NtGdiAngleArc"; - table[4107] = "gdi32.dll!NtGdiArcInternal"; - table[4108] = "gdi32.dll!NtGdiBeginPath"; - table[4110] = "gdi32.dll!NtGdiCancelDC"; - table[4111] = "gdi32.dll!NtGdiCheckBitmapBits"; - table[4112] = "gdi32.dll!NtGdiCloseFigure"; - table[4113] = "gdi32.dll!NtGdiClearBitmapAttributes"; - table[4114] = "gdi32.dll!NtGdiClearBrushAttributes"; - table[4115] = "gdi32.dll!NtGdiColorCorrectPalette"; - table[4119] = "gdi32.dll!NtGdiConfigureOPMProtectedOutput"; - table[4121] = "gdi32.dll!NtGdiConvertMetafileRect"; - table[4124] = "gdi32.dll!NtGdiCreateColorSpace"; - table[4125] = "gdi32.dll!NtGdiCreateColorTransform"; - table[4131] = "gdi32.dll!NtGdiCreateEllipticRgn"; - table[4133] = "gdi32.dll!NtGdiCreateHatchBrushInternal"; - table[4141] = "gdi32.dll!NtGdiCreateServerMetaFile"; - table[4143] = "gdi32.dll!NtGdiD3dContextCreate"; - table[4144] = "gdi32.dll!NtGdiD3dContextDestroy"; - table[4145] = "gdi32.dll!NtGdiD3dContextDestroyAll"; - table[4146] = "gdi32.dll!NtGdiD3dValidateTextureStageState"; - table[4147] = "gdi32.dll!NtGdiD3dDrawPrimitives2"; - table[4148] = "gdi32.dll!NtGdiDdGetDriverState"; - table[4149] = "gdi32.dll!NtGdiDdAddAttachedSurface"; - table[4150] = "gdi32.dll!NtGdiDdAlphaBlt"; - table[4151] = "gdi32.dll!NtGdiDdAttachSurface"; - table[4152] = "gdi32.dll!NtGdiDdBeginMoCompFrame"; - table[4153] = "gdi32.dll!NtGdiDdBlt"; - table[4154] = "gdi32.dll!NtGdiDdCanCreateSurface"; - table[4155] = "gdi32.dll!NtGdiDdCanCreateD3DBuffer"; - table[4156] = "gdi32.dll!NtGdiDdColorControl"; - table[4158] = "gdi32.dll!NtGdiDdCreateSurface"; - table[4159] = "gdi32.dll!NtGdiDdCreateD3DBuffer"; - table[4160] = "gdi32.dll!NtGdiDdCreateMoComp"; - table[4161] = "gdi32.dll!NtGdiDdCreateSurfaceObject"; - table[4162] = "gdi32.dll!NtGdiDdDeleteDirectDrawObject"; - table[4163] = "gdi32.dll!NtGdiDdDeleteSurfaceObject"; - table[4164] = "gdi32.dll!NtGdiDdDestroyMoComp"; - table[4165] = "gdi32.dll!NtGdiDdDestroySurface"; - table[4166] = "gdi32.dll!NtGdiDdDestroyD3DBuffer"; - table[4167] = "gdi32.dll!NtGdiDdEndMoCompFrame"; - table[4168] = "gdi32.dll!NtGdiDdFlip"; - table[4169] = "gdi32.dll!NtGdiDdFlipToGDISurface"; - table[4170] = "gdi32.dll!NtGdiDdGetAvailDriverMemory"; - table[4171] = "gdi32.dll!NtGdiDdGetBltStatus"; - table[4172] = "gdi32.dll!NtGdiDdGetDC"; - table[4173] = "gdi32.dll!NtGdiDdGetDriverInfo"; - table[4174] = "gdi32.dll!NtGdiDdGetDxHandle"; - table[4175] = "gdi32.dll!NtGdiDdGetFlipStatus"; - table[4176] = "gdi32.dll!NtGdiDdGetInternalMoCompInfo"; - table[4177] = "gdi32.dll!NtGdiDdGetMoCompBuffInfo"; - table[4178] = "gdi32.dll!NtGdiDdGetMoCompGuids"; - table[4179] = "gdi32.dll!NtGdiDdGetMoCompFormats"; - table[4180] = "gdi32.dll!NtGdiDdGetScanLine"; - table[4181] = "gdi32.dll!NtGdiDdLock"; - table[4182] = "gdi32.dll!NtGdiDdLockD3D"; - table[4183] = "gdi32.dll!NtGdiDdQueryDirectDrawObject"; - table[4184] = "gdi32.dll!NtGdiDdQueryMoCompStatus"; - table[4185] = "gdi32.dll!NtGdiDdReenableDirectDrawObject"; - table[4186] = "gdi32.dll!NtGdiDdReleaseDC"; - table[4187] = "gdi32.dll!NtGdiDdRenderMoComp"; - table[4188] = "gdi32.dll!NtGdiDdResetVisrgn"; - table[4189] = "gdi32.dll!NtGdiDdSetColorKey"; - table[4190] = "gdi32.dll!NtGdiDdSetExclusiveMode"; - table[4191] = "gdi32.dll!NtGdiDdSetGammaRamp"; - table[4192] = "gdi32.dll!NtGdiDdCreateSurfaceEx"; - table[4193] = "gdi32.dll!NtGdiDdSetOverlayPosition"; - table[4194] = "gdi32.dll!NtGdiDdUnattachSurface"; - table[4195] = "gdi32.dll!NtGdiDdUnlock"; - table[4196] = "gdi32.dll!NtGdiDdUnlockD3D"; - table[4197] = "gdi32.dll!NtGdiDdUpdateOverlay"; - table[4198] = "gdi32.dll!NtGdiDdWaitForVerticalBlank"; - table[4199] = "gdi32.dll!NtGdiDvpCanCreateVideoPort"; - table[4200] = "gdi32.dll!NtGdiDvpColorControl"; - table[4201] = "gdi32.dll!NtGdiDvpCreateVideoPort"; - table[4202] = "gdi32.dll!NtGdiDvpDestroyVideoPort"; - table[4203] = "gdi32.dll!NtGdiDvpFlipVideoPort"; - table[4204] = "gdi32.dll!NtGdiDvpGetVideoPortBandwidth"; - table[4205] = "gdi32.dll!NtGdiDvpGetVideoPortField"; - table[4206] = "gdi32.dll!NtGdiDvpGetVideoPortFlipStatus"; - table[4207] = "gdi32.dll!NtGdiDvpGetVideoPortInputFormats"; - table[4208] = "gdi32.dll!NtGdiDvpGetVideoPortLine"; - table[4209] = "gdi32.dll!NtGdiDvpGetVideoPortOutputFormats"; - table[4210] = "gdi32.dll!NtGdiDvpGetVideoPortConnectInfo"; - table[4211] = "gdi32.dll!NtGdiDvpGetVideoSignalStatus"; - table[4212] = "gdi32.dll!NtGdiDvpUpdateVideoPort"; - table[4213] = "gdi32.dll!NtGdiDvpWaitForVideoPortSync"; - table[4214] = "gdi32.dll!NtGdiDvpAcquireNotification"; - table[4215] = "gdi32.dll!NtGdiDvpReleaseNotification"; - table[4216] = "gdi32.dll!NtGdiDxgGenericThunk"; - table[4218] = "gdi32.dll!NtGdiDeleteColorSpace"; - table[4219] = "gdi32.dll!NtGdiDeleteColorTransform"; - table[4221] = "gdi32.dll!NtGdiDescribePixelFormat"; - table[4223] = "gdi32.dll!NtGdiGetPerBandInfo"; - table[4224] = "gdi32.dll!NtGdiDoBanding"; - table[4226] = "gdi32.dll!NtGdiDrawEscape"; - table[4227] = "gdi32.dll!NtGdiEllipse"; - table[4229] = "gdi32.dll!NtGdiEndDoc"; - table[4230] = "gdi32.dll!NtGdiEndPage"; - table[4231] = "gdi32.dll!NtGdiEndPath"; - table[4237] = "gdi32.dll!NtGdiEudcLoadUnloadLink"; - table[4246] = "gdi32.dll!NtGdiFillPath"; - table[4248] = "gdi32.dll!NtGdiFlattenPath"; - table[4250] = "gdi32.dll!NtGdiForceUFIMapping"; - table[4251] = "gdi32.dll!NtGdiFrameRgn"; - table[4252] = "gdi32.dll!NtGdiFullscreenControl"; - table[4256] = "gdi32.dll!NtGdiGetBitmapDimension"; - table[4261] = "gdi32.dll!NtGdiGetCharacterPlacementW"; - table[4265] = "gdi32.dll!NtGdiGetColorAdjustment"; - table[4267] = "gdi32.dll!NtGdiGetCOPPCompatibleOPMInformation"; - table[4276] = "gdi32.dll!NtGdiGetETM"; - table[4277] = "gdi32.dll!NtGdiGetEudcTimeStampEx"; - table[4279] = "gdi32.dll!NtGdiGetFontResourceInfoInternalW"; - table[4281] = "gdi32.dll!NtGdiGetGlyphIndicesWInternal"; - table[4282] = "gdi32.dll!NtGdiGetGlyphOutline"; - table[4283] = "gdi32.dll!NtGdiGetOPMInformation"; - table[4285] = "gdi32.dll!NtGdiGetLinkedUFIs"; - table[4293] = "gdi32.dll!NtGdiGetPath"; - table[4296] = "gdi32.dll!NtGdiGetRasterizerCaps"; - table[4300] = "gdi32.dll!NtGdiGetServerMetaFileBits"; - table[4301] = "gdi32.dll!NtGdiGetSpoolMessage"; - table[4304] = "gdi32.dll!NtGdiGetStringBitmapW"; - table[4308] = "gdi32.dll!NtGdiGetTextExtent"; - table[4313] = "gdi32.dll!NtGdiGetUFI"; - table[4314] = "gdi32.dll!NtGdiGetEmbUFI"; - table[4315] = "gdi32.dll!NtGdiGetUFIPathname"; - table[4316] = "gdi32.dll!NtGdiGetEmbedFonts"; - table[4317] = "gdi32.dll!NtGdiChangeGhostFont"; - table[4318] = "gdi32.dll!NtGdiAddEmbFontToDC"; - table[4323] = "gdi32.dll!NtGdiIcmBrushInfo"; - table[4325] = "gdi32.dll!NtGdiInitSpool"; - table[4329] = "gdi32.dll!NtGdiMakeFontDir"; - table[4330] = "gdi32.dll!NtGdiMakeInfoDC"; - table[4335] = "gdi32.dll!NtGdiOffsetClipRgn"; - table[4340] = "gdi32.dll!NtGdiPathToRegion"; - table[4342] = "gdi32.dll!NtGdiPolyDraw"; - table[4344] = "gdi32.dll!NtGdiPolyTextOutW"; - table[4346] = "gdi32.dll!NtGdiPtVisible"; - table[4347] = "gdi32.dll!NtGdiQueryFonts"; - table[4350] = "gdi32.dll!NtGdiRectInRegion"; - table[4352] = "gdi32.dll!NtGdiRemoveFontResourceW"; - table[4353] = "gdi32.dll!NtGdiRemoveFontMemResourceEx"; - table[4355] = "gdi32.dll!NtGdiResizePalette"; - table[4359] = "gdi32.dll!NtGdiScaleViewportExtEx"; - table[4360] = "gdi32.dll!NtGdiScaleWindowExtEx"; - table[4363] = "gdi32.dll!NtGdiSelectClipPath"; - table[4365] = "gdi32.dll!NtGdiSelectPen"; - table[4368] = "gdi32.dll!NtGdiSetBitmapDimension"; - table[4370] = "gdi32.dll!NtGdiSetBrushAttributes"; - table[4372] = "gdi32.dll!NtGdiSetColorAdjustment"; - table[4373] = "gdi32.dll!NtGdiSetColorSpace"; - table[4379] = "gdi32.dll!NtGdiSetLinkedUFIs"; - table[4380] = "gdi32.dll!NtGdiSetMagicColors"; - table[4383] = "gdi32.dll!NtGdiGetDeviceWidth"; - table[4384] = "gdi32.dll!NtGdiMirrorWindowOrg"; - table[4388] = "gdi32.dll!NtGdiSetPixelFormat"; - table[4389] = "gdi32.dll!NtGdiSetRectRgn"; - table[4390] = "gdi32.dll!NtGdiSetSystemPaletteUse"; - table[4395] = "gdi32.dll!NtGdiStartDoc"; - table[4396] = "gdi32.dll!NtGdiStartPage"; - table[4399] = "gdi32.dll!NtGdiStrokeAndFillPath"; - table[4400] = "gdi32.dll!NtGdiStrokePath"; - table[4401] = "gdi32.dll!NtGdiSwapBuffers"; - table[4404] = "gdi32.dll!NtGdiUnloadPrinterDriver"; - table[4406] = "gdi32.dll!NtGdiUnrealizeObject"; - table[4407] = "gdi32.dll!NtGdiUpdateColors"; - table[4408] = "gdi32.dll!NtGdiWidenPath"; - table[4728] = "gdi32.dll!NtGdiEngAssociateSurface"; - table[4729] = "gdi32.dll!NtGdiEngCreateBitmap"; - table[4730] = "gdi32.dll!NtGdiEngCreateDeviceSurface"; - table[4731] = "gdi32.dll!NtGdiEngCreateDeviceBitmap"; - table[4733] = "gdi32.dll!NtGdiEngComputeGlyphSet"; - table[4734] = "gdi32.dll!NtGdiEngCopyBits"; - table[4736] = "gdi32.dll!NtGdiEngDeleteSurface"; - table[4737] = "gdi32.dll!NtGdiEngEraseSurface"; - table[4738] = "gdi32.dll!NtGdiEngUnlockSurface"; - table[4739] = "gdi32.dll!NtGdiEngLockSurface"; - table[4740] = "gdi32.dll!NtGdiEngBitBlt"; - table[4741] = "gdi32.dll!NtGdiEngStretchBlt"; - table[4742] = "gdi32.dll!NtGdiEngPlgBlt"; - table[4743] = "gdi32.dll!NtGdiEngMarkBandingSurface"; - table[4744] = "gdi32.dll!NtGdiEngStrokePath"; - table[4745] = "gdi32.dll!NtGdiEngFillPath"; - table[4746] = "gdi32.dll!NtGdiEngStrokeAndFillPath"; - table[4747] = "gdi32.dll!NtGdiEngPaint"; - table[4748] = "gdi32.dll!NtGdiEngLineTo"; - table[4749] = "gdi32.dll!NtGdiEngAlphaBlend"; - table[4750] = "gdi32.dll!NtGdiEngGradientFill"; - table[4751] = "gdi32.dll!NtGdiEngTransparentBlt"; - table[4752] = "gdi32.dll!NtGdiEngTextOut"; - table[4753] = "gdi32.dll!NtGdiEngStretchBltROP"; - table[4754] = "gdi32.dll!NtGdiXLATEOBJ_cGetPalette"; - table[4755] = "gdi32.dll!NtGdiXLATEOBJ_iXlate"; - table[4756] = "gdi32.dll!NtGdiXLATEOBJ_hGetColorTransform"; - table[4757] = "gdi32.dll!NtGdiCLIPOBJ_bEnum"; - table[4758] = "gdi32.dll!NtGdiCLIPOBJ_cEnumStart"; - table[4759] = "gdi32.dll!NtGdiCLIPOBJ_ppoGetPath"; - table[4760] = "gdi32.dll!NtGdiEngDeletePath"; - table[4761] = "gdi32.dll!NtGdiEngCreateClip"; - table[4762] = "gdi32.dll!NtGdiEngDeleteClip"; - table[4763] = "gdi32.dll!NtGdiBRUSHOBJ_ulGetBrushColor"; - table[4764] = "gdi32.dll!NtGdiBRUSHOBJ_pvAllocRbrush"; - table[4765] = "gdi32.dll!NtGdiBRUSHOBJ_pvGetRbrush"; - table[4766] = "gdi32.dll!NtGdiBRUSHOBJ_hGetColorTransform"; - table[4767] = "gdi32.dll!NtGdiXFORMOBJ_bApplyXform"; - table[4769] = "gdi32.dll!NtGdiFONTOBJ_vGetInfo"; - table[4771] = "gdi32.dll!NtGdiFONTOBJ_cGetGlyphs"; - table[4772] = "gdi32.dll!NtGdiFONTOBJ_pifi"; - table[4773] = "gdi32.dll!NtGdiFONTOBJ_pfdg"; - table[4774] = "gdi32.dll!NtGdiFONTOBJ_pQueryGlyphAttrs"; - table[4775] = "gdi32.dll!NtGdiFONTOBJ_pvTrueTypeFontFile"; - table[4776] = "gdi32.dll!NtGdiFONTOBJ_cGetAllGlyphHandles"; - table[4777] = "gdi32.dll!NtGdiSTROBJ_bEnum"; - table[4778] = "gdi32.dll!NtGdiSTROBJ_bEnumPositionsOnly"; - table[4779] = "gdi32.dll!NtGdiSTROBJ_bGetAdvanceWidths"; - table[4780] = "gdi32.dll!NtGdiSTROBJ_vEnumStart"; - table[4781] = "gdi32.dll!NtGdiSTROBJ_dwGetCodePage"; - table[4782] = "gdi32.dll!NtGdiPATHOBJ_vGetBounds"; - table[4783] = "gdi32.dll!NtGdiPATHOBJ_bEnum"; - table[4784] = "gdi32.dll!NtGdiPATHOBJ_vEnumStart"; - table[4785] = "gdi32.dll!NtGdiPATHOBJ_vEnumStartClipLines"; - table[4786] = "gdi32.dll!NtGdiPATHOBJ_bEnumClipLines"; - table[4787] = "gdi32.dll!NtGdiGetDhpdev"; - table[4788] = "gdi32.dll!NtGdiEngCheckAbort"; - table[4789] = "gdi32.dll!NtGdiHT_Get8BPPFormatPalette"; - table[4790] = "gdi32.dll!NtGdiHT_Get8BPPMaskPalette"; - table[4791] = "gdi32.dll!NtGdiUpdateTransform"; - table[4793] = "gdi32.dll!NtGdiBRUSHOBJ_DeleteRbrush"; - table[4794] = "gdi32.dll!NtGdiUMPDEngFreeUserMem"; - table[4808] = "gdi32.dll!NtGdiDdDDICreateSynchronizationObject"; - table[4809] = "gdi32.dll!NtGdiDdDDIDestroySynchronizationObject"; - table[4810] = "gdi32.dll!NtGdiDdDDIWaitForSynchronizationObject"; - table[4811] = "gdi32.dll!NtGdiDdDDISignalSynchronizationObject"; - table[4812] = "gdi32.dll!NtGdiDdDDIGetRuntimeData"; - table[4818] = "gdi32.dll!NtGdiDdDDIGetMultisampleMethodList"; - table[4826] = "gdi32.dll!NtGdiDdDDIQueryStatistics"; - table[4829] = "gdi32.dll!NtGdiDdDDICreateOverlay"; - table[4830] = "gdi32.dll!NtGdiDdDDIUpdateOverlay"; - table[4831] = "gdi32.dll!NtGdiDdDDIFlipOverlay"; - table[4832] = "gdi32.dll!NtGdiDdDDIDestroyOverlay"; - table[4834] = "gdi32.dll!NtGdiDdDDISetGammaRamp"; - table[4839] = "gdi32.dll!NtGdiDdDDIGetContextSchedulingPriority"; - table[4841] = "gdi32.dll!NtGdiDdDDIGetProcessSchedulingPriorityClass"; - table[4842] = "gdi32.dll!NtGdiDdDDIReleaseProcessVidPnSourceOwners"; - table[4843] = "gdi32.dll!NtGdiDdDDIGetScanLine"; - table[4845] = "gdi32.dll!NtGdiDdDDIPollDisplayChildren"; - table[4846] = "gdi32.dll!NtGdiDdDDIInvalidateActiveVidPn"; - table[4847] = "gdi32.dll!NtGdiDdDDICheckOcclusion"; - table[4848] = "gdi32.dll!NtGdiDdDDIWaitForIdle"; - table[4851] = "gdi32.dll!NtGdiDdDDISetDisplayPrivateDriverFormat"; - table[4852] = "gdi32.dll!NtGdiDdDDISharedPrimaryLockNotification"; - table[4853] = "gdi32.dll!NtGdiDdDDISharedPrimaryUnLockNotification"; - table[4856] = "gdi32.dll!NtGdiGetNumberOfPhysicalMonitors"; - table[4857] = "gdi32.dll!NtGdiGetPhysicalMonitors"; - table[4858] = "gdi32.dll!NtGdiGetPhysicalMonitorDescription"; - table[4859] = "gdi32.dll!NtGdiDestroyPhysicalMonitor"; - table[4860] = "gdi32.dll!NtGdiDDCCIGetVCPFeature"; - table[4861] = "gdi32.dll!NtGdiDDCCISetVCPFeature"; - table[4862] = "gdi32.dll!NtGdiDDCCISaveCurrentSettings"; - table[4863] = "gdi32.dll!NtGdiDDCCIGetCapabilitiesStringLength"; - table[4864] = "gdi32.dll!NtGdiDDCCIGetCapabilitiesString"; - table[4865] = "gdi32.dll!NtGdiDDCCIGetTimingReport"; - table[0] = "ntdll.dll!NtAcceptConnectPort"; - table[1] = "ntdll.dll!NtAccessCheck"; - table[2] = "ntdll.dll!ZwAccessCheckAndAuditAlarm"; - table[3] = "ntdll.dll!NtAccessCheckByType"; - table[4] = "ntdll.dll!NtAccessCheckByTypeAndAuditAlarm"; - table[5] = "ntdll.dll!NtAccessCheckByTypeResultList"; - table[6] = "ntdll.dll!NtAccessCheckByTypeResultListAndAuditAlarm"; - table[7] = "ntdll.dll!ZwAccessCheckByTypeResultListAndAuditAlarmByHandle"; - table[8] = "ntdll.dll!NtAddAtom"; - table[9] = "ntdll.dll!ZwAddBootEntry"; - table[10] = "ntdll.dll!NtAddDriverEntry"; - table[11] = "ntdll.dll!ZwAdjustGroupsToken"; - table[12] = "ntdll.dll!ZwAdjustPrivilegesToken"; - table[13] = "ntdll.dll!NtAlertResumeThread"; - table[14] = "ntdll.dll!NtAlertThread"; - table[15] = "ntdll.dll!ZwAllocateLocallyUniqueId"; - table[16] = "ntdll.dll!NtAllocateUserPhysicalPages"; - table[17] = "ntdll.dll!NtAllocateUuids"; - table[18] = "ntdll.dll!NtAllocateVirtualMemory"; - table[19] = "ntdll.dll!NtAlpcAcceptConnectPort"; - table[20] = "ntdll.dll!ZwAlpcCancelMessage"; - table[21] = "ntdll.dll!ZwAlpcConnectPort"; - table[22] = "ntdll.dll!ZwAlpcCreatePort"; - table[23] = "ntdll.dll!NtAlpcCreatePortSection"; - table[24] = "ntdll.dll!ZwAlpcCreateResourceReserve"; - table[25] = "ntdll.dll!ZwAlpcCreateSectionView"; - table[26] = "ntdll.dll!ZwAlpcCreateSecurityContext"; - table[27] = "ntdll.dll!ZwAlpcDeletePortSection"; - table[28] = "ntdll.dll!NtAlpcDeleteResourceReserve"; - table[29] = "ntdll.dll!NtAlpcDeleteSectionView"; - table[30] = "ntdll.dll!NtAlpcDeleteSecurityContext"; - table[31] = "ntdll.dll!NtAlpcDisconnectPort"; - table[32] = "ntdll.dll!ZwAlpcImpersonateClientOfPort"; - table[33] = "ntdll.dll!ZwAlpcOpenSenderProcess"; - table[34] = "ntdll.dll!ZwAlpcOpenSenderThread"; - table[35] = "ntdll.dll!ZwAlpcQueryInformation"; - table[36] = "ntdll.dll!ZwAlpcQueryInformationMessage"; - table[37] = "ntdll.dll!NtAlpcRevokeSecurityContext"; - table[38] = "ntdll.dll!NtAlpcSendWaitReceivePort"; - table[39] = "ntdll.dll!NtAlpcSetInformation"; - table[40] = "ntdll.dll!NtApphelpCacheControl"; - table[41] = "ntdll.dll!ZwAreMappedFilesTheSame"; - table[42] = "ntdll.dll!ZwAssignProcessToJobObject"; - table[43] = "ntdll.dll!ZwCallbackReturn"; - table[44] = "ntdll.dll!NtCancelDeviceWakeupRequest"; - table[45] = "ntdll.dll!ZwCancelIoFile"; - table[46] = "ntdll.dll!ZwCancelTimer"; - table[47] = "ntdll.dll!NtClearEvent"; - table[48] = "ntdll.dll!NtClose"; - table[49] = "ntdll.dll!ZwCloseObjectAuditAlarm"; - table[50] = "ntdll.dll!NtCompactKeys"; - table[51] = "ntdll.dll!ZwCompareTokens"; - table[52] = "ntdll.dll!NtCompleteConnectPort"; - table[53] = "ntdll.dll!ZwCompressKey"; - table[54] = "ntdll.dll!NtConnectPort"; - table[55] = "ntdll.dll!ZwContinue"; - table[56] = "ntdll.dll!ZwCreateDebugObject"; - table[57] = "ntdll.dll!ZwCreateDirectoryObject"; - table[58] = "ntdll.dll!NtCreateEvent"; - table[59] = "ntdll.dll!NtCreateEventPair"; - table[60] = "ntdll.dll!NtCreateFile"; - table[61] = "ntdll.dll!NtCreateIoCompletion"; - table[62] = "ntdll.dll!ZwCreateJobObject"; - table[63] = "ntdll.dll!NtCreateJobSet"; - table[64] = "ntdll.dll!ZwCreateKey"; - table[65] = "ntdll.dll!NtCreateKeyTransacted"; - table[66] = "ntdll.dll!ZwCreateMailslotFile"; - table[67] = "ntdll.dll!ZwCreateMutant"; - table[68] = "ntdll.dll!ZwCreateNamedPipeFile"; - table[69] = "ntdll.dll!NtCreatePrivateNamespace"; - table[70] = "ntdll.dll!NtCreatePagingFile"; - table[71] = "ntdll.dll!ZwCreatePort"; - table[72] = "ntdll.dll!ZwCreateProcess"; - table[73] = "ntdll.dll!ZwCreateProcessEx"; - table[74] = "ntdll.dll!ZwCreateProfile"; - table[75] = "ntdll.dll!NtCreateSection"; - table[76] = "ntdll.dll!NtCreateSemaphore"; - table[77] = "ntdll.dll!ZwCreateSymbolicLinkObject"; - table[78] = "ntdll.dll!NtCreateThread"; - table[79] = "ntdll.dll!ZwCreateTimer"; - table[80] = "ntdll.dll!NtCreateToken"; - table[81] = "ntdll.dll!NtCreateTransaction"; - table[82] = "ntdll.dll!ZwOpenTransaction"; - table[83] = "ntdll.dll!ZwQueryInformationTransaction"; - table[84] = "ntdll.dll!NtQueryInformationTransactionManager"; - table[85] = "ntdll.dll!NtPrePrepareEnlistment"; - table[86] = "ntdll.dll!ZwPrepareEnlistment"; - table[87] = "ntdll.dll!NtCommitEnlistment"; - table[88] = "ntdll.dll!ZwReadOnlyEnlistment"; - table[89] = "ntdll.dll!ZwRollbackComplete"; - table[90] = "ntdll.dll!NtRollbackEnlistment"; - table[91] = "ntdll.dll!NtCommitTransaction"; - table[92] = "ntdll.dll!NtRollbackTransaction"; - table[93] = "ntdll.dll!ZwPrePrepareComplete"; - table[94] = "ntdll.dll!NtPrepareComplete"; - table[95] = "ntdll.dll!ZwCommitComplete"; - table[96] = "ntdll.dll!ZwSinglePhaseReject"; - table[97] = "ntdll.dll!ZwSetInformationTransaction"; - table[98] = "ntdll.dll!ZwSetInformationTransactionManager"; - table[99] = "ntdll.dll!ZwSetInformationResourceManager"; - table[100] = "ntdll.dll!ZwCreateTransactionManager"; - table[101] = "ntdll.dll!ZwOpenTransactionManager"; - table[102] = "ntdll.dll!NtRenameTransactionManager"; - table[103] = "ntdll.dll!NtRollforwardTransactionManager"; - table[104] = "ntdll.dll!NtRecoverEnlistment"; - table[105] = "ntdll.dll!NtRecoverResourceManager"; - table[106] = "ntdll.dll!ZwRecoverTransactionManager"; - table[107] = "ntdll.dll!ZwCreateResourceManager"; - table[108] = "ntdll.dll!ZwOpenResourceManager"; - table[109] = "ntdll.dll!ZwGetNotificationResourceManager"; - table[110] = "ntdll.dll!ZwQueryInformationResourceManager"; - table[111] = "ntdll.dll!ZwCreateEnlistment"; - table[112] = "ntdll.dll!ZwOpenEnlistment"; - table[113] = "ntdll.dll!NtSetInformationEnlistment"; - table[114] = "ntdll.dll!ZwQueryInformationEnlistment"; - table[115] = "ntdll.dll!ZwCreateWaitablePort"; - table[116] = "ntdll.dll!NtDebugActiveProcess"; - table[117] = "ntdll.dll!ZwDebugContinue"; - table[118] = "ntdll.dll!ZwDelayExecution"; - table[119] = "ntdll.dll!ZwDeleteAtom"; - table[120] = "ntdll.dll!NtDeleteBootEntry"; - table[121] = "ntdll.dll!ZwDeleteDriverEntry"; - table[122] = "ntdll.dll!NtDeleteFile"; - table[123] = "ntdll.dll!ZwDeleteKey"; - table[124] = "ntdll.dll!NtDeletePrivateNamespace"; - table[125] = "ntdll.dll!NtDeleteObjectAuditAlarm"; - table[126] = "ntdll.dll!NtDeleteValueKey"; - table[127] = "ntdll.dll!ZwDeviceIoControlFile"; - table[128] = "ntdll.dll!NtDisplayString"; - table[129] = "ntdll.dll!ZwDuplicateObject"; - table[130] = "ntdll.dll!NtDuplicateToken"; - table[131] = "ntdll.dll!ZwEnumerateBootEntries"; - table[132] = "ntdll.dll!NtEnumerateDriverEntries"; - table[133] = "ntdll.dll!ZwEnumerateKey"; - table[134] = "ntdll.dll!ZwEnumerateSystemEnvironmentValuesEx"; - table[135] = "ntdll.dll!ZwEnumerateTransactionObject"; - table[136] = "ntdll.dll!NtEnumerateValueKey"; - table[137] = "ntdll.dll!ZwExtendSection"; - table[138] = "ntdll.dll!NtFilterToken"; - table[139] = "ntdll.dll!NtFindAtom"; - table[140] = "ntdll.dll!ZwFlushBuffersFile"; - table[141] = "ntdll.dll!ZwFlushInstructionCache"; - table[142] = "ntdll.dll!NtFlushKey"; - table[143] = "ntdll.dll!ZwFlushProcessWriteBuffers"; - table[144] = "ntdll.dll!ZwFlushVirtualMemory"; - table[145] = "ntdll.dll!NtFlushWriteBuffer"; - table[146] = "ntdll.dll!NtFreeUserPhysicalPages"; - table[147] = "ntdll.dll!NtFreeVirtualMemory"; - table[148] = "ntdll.dll!NtFreezeRegistry"; - table[149] = "ntdll.dll!ZwFreezeTransactions"; - table[150] = "ntdll.dll!NtFsControlFile"; - table[151] = "ntdll.dll!NtGetContextThread"; - table[152] = "ntdll.dll!NtGetDevicePowerState"; - table[153] = "ntdll.dll!NtGetNlsSectionPtr"; - table[154] = "ntdll.dll!ZwGetPlugPlayEvent"; - table[155] = "ntdll.dll!NtGetWriteWatch"; - table[156] = "ntdll.dll!NtImpersonateAnonymousToken"; - table[157] = "ntdll.dll!ZwImpersonateClientOfPort"; - table[158] = "ntdll.dll!ZwImpersonateThread"; - table[159] = "ntdll.dll!ZwInitializeNlsFiles"; - table[160] = "ntdll.dll!ZwInitializeRegistry"; - table[161] = "ntdll.dll!NtInitiatePowerAction"; - table[162] = "ntdll.dll!ZwIsProcessInJob"; - table[163] = "ntdll.dll!NtIsSystemResumeAutomatic"; - table[164] = "ntdll.dll!ZwListenPort"; - table[165] = "ntdll.dll!NtLoadDriver"; - table[166] = "ntdll.dll!NtLoadKey"; - table[167] = "ntdll.dll!NtLoadKey2"; - table[168] = "ntdll.dll!NtLoadKeyEx"; - table[169] = "ntdll.dll!NtLockFile"; - table[170] = "ntdll.dll!ZwLockProductActivationKeys"; - table[171] = "ntdll.dll!NtLockRegistryKey"; - table[172] = "ntdll.dll!ZwLockVirtualMemory"; - table[173] = "ntdll.dll!ZwMakePermanentObject"; - table[174] = "ntdll.dll!NtMakeTemporaryObject"; - table[175] = "ntdll.dll!NtMapUserPhysicalPages"; - table[176] = "ntdll.dll!ZwMapUserPhysicalPagesScatter"; - table[177] = "ntdll.dll!ZwMapViewOfSection"; - table[178] = "ntdll.dll!NtModifyBootEntry"; - table[179] = "ntdll.dll!ZwModifyDriverEntry"; - table[180] = "ntdll.dll!NtNotifyChangeDirectoryFile"; - table[181] = "ntdll.dll!NtNotifyChangeKey"; - table[182] = "ntdll.dll!NtNotifyChangeMultipleKeys"; - table[183] = "ntdll.dll!ZwOpenDirectoryObject"; - table[184] = "ntdll.dll!NtOpenEvent"; - table[185] = "ntdll.dll!NtOpenEventPair"; - table[186] = "ntdll.dll!NtOpenFile"; - table[187] = "ntdll.dll!ZwOpenIoCompletion"; - table[188] = "ntdll.dll!ZwOpenJobObject"; - table[189] = "ntdll.dll!ZwOpenKey"; - table[190] = "ntdll.dll!NtOpenKeyTransacted"; - table[191] = "ntdll.dll!NtOpenMutant"; - table[192] = "ntdll.dll!NtOpenPrivateNamespace"; - table[193] = "ntdll.dll!ZwOpenObjectAuditAlarm"; - table[194] = "ntdll.dll!ZwOpenProcess"; - table[195] = "ntdll.dll!ZwOpenProcessToken"; - table[196] = "ntdll.dll!ZwOpenProcessTokenEx"; - table[197] = "ntdll.dll!NtOpenSection"; - table[198] = "ntdll.dll!NtOpenSemaphore"; - table[199] = "ntdll.dll!NtOpenSession"; - table[200] = "ntdll.dll!NtOpenSymbolicLinkObject"; - table[201] = "ntdll.dll!ZwOpenThread"; - table[202] = "ntdll.dll!NtOpenThreadToken"; - table[203] = "ntdll.dll!NtOpenThreadTokenEx"; - table[204] = "ntdll.dll!ZwOpenTimer"; - table[205] = "ntdll.dll!NtPlugPlayControl"; - table[206] = "ntdll.dll!ZwPowerInformation"; - table[207] = "ntdll.dll!ZwPrivilegeCheck"; - table[208] = "ntdll.dll!ZwPrivilegeObjectAuditAlarm"; - table[209] = "ntdll.dll!NtPrivilegedServiceAuditAlarm"; - table[210] = "ntdll.dll!ZwProtectVirtualMemory"; - table[211] = "ntdll.dll!ZwPulseEvent"; - table[212] = "ntdll.dll!ZwQueryAttributesFile"; - table[213] = "ntdll.dll!ZwQueryBootEntryOrder"; - table[214] = "ntdll.dll!ZwQueryBootOptions"; - table[215] = "ntdll.dll!NtQueryDebugFilterState"; - table[216] = "ntdll.dll!NtQueryDefaultLocale"; - table[217] = "ntdll.dll!ZwQueryDefaultUILanguage"; - table[218] = "ntdll.dll!ZwQueryDirectoryFile"; - table[219] = "ntdll.dll!ZwQueryDirectoryObject"; - table[220] = "ntdll.dll!NtQueryDriverEntryOrder"; - table[221] = "ntdll.dll!ZwQueryEaFile"; - table[222] = "ntdll.dll!NtQueryEvent"; - table[223] = "ntdll.dll!ZwQueryFullAttributesFile"; - table[224] = "ntdll.dll!NtQueryInformationAtom"; - table[225] = "ntdll.dll!ZwQueryInformationFile"; - table[226] = "ntdll.dll!ZwQueryInformationJobObject"; - table[227] = "ntdll.dll!ZwQueryInformationPort"; - table[228] = "ntdll.dll!ZwQueryInformationProcess"; - table[229] = "ntdll.dll!NtQueryInformationThread"; - table[230] = "ntdll.dll!ZwQueryInformationToken"; - table[231] = "ntdll.dll!NtQueryInstallUILanguage"; - table[232] = "ntdll.dll!NtQueryIntervalProfile"; - table[233] = "ntdll.dll!NtQueryIoCompletion"; - table[234] = "ntdll.dll!ZwQueryKey"; - table[235] = "ntdll.dll!NtQueryMultipleValueKey"; - table[236] = "ntdll.dll!NtQueryMutant"; - table[237] = "ntdll.dll!NtQueryObject"; - table[238] = "ntdll.dll!NtQueryOpenSubKeys"; - table[239] = "ntdll.dll!NtQueryOpenSubKeysEx"; - table[240] = "ntdll.dll!NtQueryPerformanceCounter"; - table[241] = "ntdll.dll!ZwQueryQuotaInformationFile"; - table[242] = "ntdll.dll!ZwQuerySection"; - table[243] = "ntdll.dll!NtQuerySecurityObject"; - table[244] = "ntdll.dll!ZwQuerySemaphore"; - table[245] = "ntdll.dll!ZwQuerySymbolicLinkObject"; - table[246] = "ntdll.dll!ZwQuerySystemEnvironmentValue"; - table[247] = "ntdll.dll!ZwQuerySystemEnvironmentValueEx"; - table[248] = "ntdll.dll!NtQuerySystemInformation"; - table[249] = "ntdll.dll!NtQuerySystemTime"; - table[250] = "ntdll.dll!ZwQueryTimer"; - table[251] = "ntdll.dll!NtQueryTimerResolution"; - table[252] = "ntdll.dll!ZwQueryValueKey"; - table[253] = "ntdll.dll!NtQueryVirtualMemory"; - table[254] = "ntdll.dll!NtQueryVolumeInformationFile"; - table[255] = "ntdll.dll!NtQueueApcThread"; - table[256] = "ntdll.dll!ZwRaiseException"; - table[257] = "ntdll.dll!ZwRaiseHardError"; - table[258] = "ntdll.dll!NtReadFile"; - table[259] = "ntdll.dll!NtReadFileScatter"; - table[260] = "ntdll.dll!ZwReadRequestData"; - table[261] = "ntdll.dll!NtReadVirtualMemory"; - table[262] = "ntdll.dll!ZwRegisterThreadTerminatePort"; - table[263] = "ntdll.dll!ZwReleaseMutant"; - table[264] = "ntdll.dll!NtReleaseSemaphore"; - table[265] = "ntdll.dll!ZwRemoveIoCompletion"; - table[266] = "ntdll.dll!ZwRemoveProcessDebug"; - table[267] = "ntdll.dll!ZwRenameKey"; - table[268] = "ntdll.dll!ZwReplaceKey"; - table[269] = "ntdll.dll!NtReplacePartitionUnit"; - table[270] = "ntdll.dll!ZwReplyPort"; - table[271] = "ntdll.dll!NtReplyWaitReceivePort"; - table[272] = "ntdll.dll!NtReplyWaitReceivePortEx"; - table[273] = "ntdll.dll!NtReplyWaitReplyPort"; - table[274] = "ntdll.dll!ZwRequestDeviceWakeup"; - table[275] = "ntdll.dll!ZwRequestPort"; - table[276] = "ntdll.dll!NtRequestWaitReplyPort"; - table[277] = "ntdll.dll!ZwRequestWakeupLatency"; - table[278] = "ntdll.dll!NtResetEvent"; - table[279] = "ntdll.dll!ZwResetWriteWatch"; - table[280] = "ntdll.dll!NtRestoreKey"; - table[281] = "ntdll.dll!ZwResumeProcess"; - table[282] = "ntdll.dll!ZwResumeThread"; - table[283] = "ntdll.dll!NtSaveKey"; - table[284] = "ntdll.dll!NtSaveKeyEx"; - table[285] = "ntdll.dll!NtSaveMergedKeys"; - table[286] = "ntdll.dll!NtSecureConnectPort"; - table[287] = "ntdll.dll!ZwSetBootEntryOrder"; - table[288] = "ntdll.dll!ZwSetBootOptions"; - table[289] = "ntdll.dll!ZwSetContextThread"; - table[290] = "ntdll.dll!NtSetDebugFilterState"; - table[291] = "ntdll.dll!NtSetDefaultHardErrorPort"; - table[292] = "ntdll.dll!NtSetDefaultLocale"; - table[293] = "ntdll.dll!ZwSetDefaultUILanguage"; - table[294] = "ntdll.dll!NtSetDriverEntryOrder"; - table[295] = "ntdll.dll!ZwSetEaFile"; - table[296] = "ntdll.dll!NtSetEvent"; - table[297] = "ntdll.dll!NtSetEventBoostPriority"; - table[298] = "ntdll.dll!NtSetHighEventPair"; - table[299] = "ntdll.dll!NtSetHighWaitLowEventPair"; - table[300] = "ntdll.dll!ZwSetInformationDebugObject"; - table[301] = "ntdll.dll!ZwSetInformationFile"; - table[302] = "ntdll.dll!ZwSetInformationJobObject"; - table[303] = "ntdll.dll!ZwSetInformationKey"; - table[304] = "ntdll.dll!ZwSetInformationObject"; - table[305] = "ntdll.dll!ZwSetInformationProcess"; - table[306] = "ntdll.dll!ZwSetInformationThread"; - table[307] = "ntdll.dll!ZwSetInformationToken"; - table[308] = "ntdll.dll!NtSetIntervalProfile"; - table[309] = "ntdll.dll!NtSetIoCompletion"; - table[310] = "ntdll.dll!ZwSetLdtEntries"; - table[311] = "ntdll.dll!ZwSetLowEventPair"; - table[312] = "ntdll.dll!ZwSetLowWaitHighEventPair"; - table[313] = "ntdll.dll!ZwSetQuotaInformationFile"; - table[314] = "ntdll.dll!NtSetSecurityObject"; - table[315] = "ntdll.dll!ZwSetSystemEnvironmentValue"; - table[316] = "ntdll.dll!ZwSetSystemEnvironmentValueEx"; - table[317] = "ntdll.dll!ZwSetSystemInformation"; - table[318] = "ntdll.dll!ZwSetSystemPowerState"; - table[319] = "ntdll.dll!ZwSetSystemTime"; - table[320] = "ntdll.dll!ZwSetThreadExecutionState"; - table[321] = "ntdll.dll!ZwSetTimer"; - table[322] = "ntdll.dll!NtSetTimerResolution"; - table[323] = "ntdll.dll!ZwSetUuidSeed"; - table[324] = "ntdll.dll!ZwSetValueKey"; - table[325] = "ntdll.dll!NtSetVolumeInformationFile"; - table[326] = "ntdll.dll!ZwShutdownSystem"; - table[327] = "ntdll.dll!ZwSignalAndWaitForSingleObject"; - table[328] = "ntdll.dll!NtStartProfile"; - table[329] = "ntdll.dll!ZwStopProfile"; - table[330] = "ntdll.dll!ZwSuspendProcess"; - table[331] = "ntdll.dll!ZwSuspendThread"; - table[332] = "ntdll.dll!NtSystemDebugControl"; - table[333] = "ntdll.dll!ZwTerminateJobObject"; - table[334] = "ntdll.dll!ZwTerminateProcess"; - table[335] = "ntdll.dll!ZwTerminateThread"; - table[336] = "ntdll.dll!NtTestAlert"; - table[337] = "ntdll.dll!ZwThawRegistry"; - table[338] = "ntdll.dll!NtThawTransactions"; - table[339] = "ntdll.dll!NtTraceEvent"; - table[340] = "ntdll.dll!ZwTraceControl"; - table[341] = "ntdll.dll!NtTranslateFilePath"; - table[342] = "ntdll.dll!ZwUnloadDriver"; - table[343] = "ntdll.dll!NtUnloadKey"; - table[344] = "ntdll.dll!ZwUnloadKey2"; - table[345] = "ntdll.dll!ZwUnloadKeyEx"; - table[346] = "ntdll.dll!ZwUnlockFile"; - table[347] = "ntdll.dll!NtUnlockVirtualMemory"; - table[348] = "ntdll.dll!NtUnmapViewOfSection"; - table[349] = "ntdll.dll!NtVdmControl"; - table[350] = "ntdll.dll!NtWaitForDebugEvent"; - table[351] = "ntdll.dll!NtWaitForMultipleObjects"; - table[352] = "ntdll.dll!ZwWaitForSingleObject"; - table[353] = "ntdll.dll!ZwWaitHighEventPair"; - table[354] = "ntdll.dll!NtWaitLowEventPair"; - table[355] = "ntdll.dll!NtWriteFile"; - table[356] = "ntdll.dll!NtWriteFileGather"; - table[357] = "ntdll.dll!NtWriteRequestData"; - table[358] = "ntdll.dll!NtWriteVirtualMemory"; - table[359] = "ntdll.dll!ZwYieldExecution"; - table[360] = "ntdll.dll!ZwCreateKeyedEvent"; - table[361] = "ntdll.dll!NtOpenKeyedEvent"; - table[362] = "ntdll.dll!NtReleaseKeyedEvent"; - table[363] = "ntdll.dll!NtWaitForKeyedEvent"; - table[364] = "ntdll.dll!ZwQueryPortInformationProcess"; - table[365] = "ntdll.dll!NtGetCurrentProcessorNumber"; - table[366] = "ntdll.dll!NtWaitForMultipleObjects32"; - table[367] = "ntdll.dll!ZwGetNextProcess"; - table[368] = "ntdll.dll!ZwGetNextThread"; - table[369] = "ntdll.dll!NtCancelIoFileEx"; - table[370] = "ntdll.dll!NtCancelSynchronousIoFile"; - table[371] = "ntdll.dll!ZwRemoveIoCompletionEx"; - table[372] = "ntdll.dll!ZwRegisterProtocolAddressInformation"; - table[373] = "ntdll.dll!NtPropagationComplete"; - table[374] = "ntdll.dll!ZwPropagationFailed"; - table[375] = "ntdll.dll!NtCreateWorkerFactory"; - table[376] = "ntdll.dll!ZwReleaseWorkerFactoryWorker"; - table[377] = "ntdll.dll!NtWaitForWorkViaWorkerFactory"; - table[378] = "ntdll.dll!ZwSetInformationWorkerFactory"; - table[379] = "ntdll.dll!ZwQueryInformationWorkerFactory"; - table[380] = "ntdll.dll!NtWorkerFactoryWorkerReady"; - table[381] = "ntdll.dll!NtShutdownWorkerFactory"; - table[382] = "ntdll.dll!NtCreateThreadEx"; - table[383] = "ntdll.dll!NtCreateUserProcess"; - table[384] = "ntdll.dll!NtQueryLicenseValue"; - table[385] = "ntdll.dll!ZwMapCMFModule"; - table[386] = "ntdll.dll!ZwIsUILanguageComitted"; - table[387] = "ntdll.dll!ZwFlushInstallUILanguage"; - table[388] = "ntdll.dll!NtGetMUIRegistryInfo"; - table[389] = "ntdll.dll!ZwAcquireCMFViewOwnership"; - table[390] = "ntdll.dll!NtReleaseCMFViewOwnership"; - table[4545] = "imm32.dll!NtUserGetThreadState"; - table[4520] = "imm32.dll!NtUserGetImeInfoEx"; - table[4600] = "imm32.dll!NtUserQueryWindow"; - table[4598] = "imm32.dll!NtUserQueryInputContext"; - table[4581] = "imm32.dll!NtUserNotifyIMEStatus"; - table[4412] = "imm32.dll!NtUserAssociateInputContext"; - table[4429] = "imm32.dll!NtUserCallOneParam"; - table[4463] = "imm32.dll!NtUserDisableThreadIme"; - table[4635] = "imm32.dll!NtUserSetImeInfoEx"; - table[4697] = "imm32.dll!NtUserUpdateInputContext"; - table[4417] = "imm32.dll!NtUserBuildHimcList"; - table[4704] = "imm32.dll!NtUserValidateHandleSecure"; - table[4450] = "imm32.dll!NtUserCreateInputContext"; - table[4460] = "imm32.dll!NtUserDestroyInputContext"; - table[4492] = "imm32.dll!NtUserGetAppImeLevel"; - table[4519] = "imm32.dll!NtUserGetImeHotKey"; - table[4623] = "imm32.dll!NtUserSetAppImeLevel"; - table[4657] = "imm32.dll!NtUserSetThreadLayoutHandles"; - table[4560] = "user32.dll!NtUserInitializeClientPfnArrays"; - table[4596] = "user32.dll!NtUserProcessConnect"; - table[4453] = "user32.dll!NtUserCreateWindowStation"; - table[4449] = "user32.dll!NtUserCreateDesktopEx"; - table[4695] = "user32.dll!NtUserUnregisterUserApiHook"; - table[4607] = "user32.dll!NtUserRegisterUserApiHook"; - table[4634] = "user32.dll!NtUserSetImeHotKey"; - table[4670] = "user32.dll!NtUserSetWindowStationUser"; - table[4568] = "user32.dll!NtUserLoadKeyboardLayoutEx"; - table[4702] = "user32.dll!NtUserUpdatePerUserSystemParameters"; - table[4465] = "user32.dll!NtUserDoSoundConnect"; - table[4720] = "user32.dll!NtUserRegisterSessionPort"; - table[4423] = "user32.dll!NtUserCallHwndOpt"; - table[4651] = "user32.dll!NtUserSetShellWindowEx"; - table[4421] = "user32.dll!NtUserCallHwnd"; - table[4723] = "user32.dll!NtUserDwmStartRedirection"; - table[4609] = "user32.dll!NtUserRegisterRawInputDevices"; - table[4495] = "user32.dll!NtUserGetCaretBlinkTime"; - table[4681] = "user32.dll!NtUserThunkedMenuInfo"; - table[4570] = "user32.dll!NtUserLockWindowUpdate"; - table[4445] = "user32.dll!NtUserCopyAcceleratorTable"; - table[4478] = "user32.dll!NtUserEndMenu"; - table[4458] = "user32.dll!DestroyAcceleratorTable"; - table[4625] = "user32.dll!NtUserSetClassLong"; - table[4613] = "user32.dll!NtUserRemoveMenu"; - table[4643] = "user32.dll!NtUserSetMenuDefaultItem"; - table[4461] = "user32.dll!NtUserDestroyMenu"; - table[4553] = "user32.dll!NtUserGhostWindowFromHungWindow"; - table[4590] = "user32.dll!NtUserPaintMonitor"; - table[4589] = "user32.dll!NtUserPaintDesktop"; - table[4454] = "user32.dll!NtUserDdeInitialize"; - table[4663] = "user32.dll!NtUserSetWindowPlacement"; - table[4669] = "user32.dll!NtUserSetWindowsHookEx"; - table[4457] = "user32.dll!NtUserDeleteMenu"; - table[4565] = "user32.dll!NtUserInvalidateRgn"; - table[4638] = "user32.dll!NtUserSetInformationThread"; - table[4493] = "user32.dll!NtUserGetAsyncKeyState"; - table[4434] = "user32.dll!NtUserCheckDesktopByThreadId"; - table[4727] = "user32.dll!NtUserGetWindowMinimizeRect"; - table[4672] = "user32.dll!NtUserSetWinEventHook"; - table[4508] = "user32.dll!NtUserGetCPD"; - table[4665] = "user32.dll!NtUserSetWindowRgn"; - table[4569] = "user32.dll!NtUserLockWindowStation"; - table[4485] = "user32.dll!NtUserFillWindow"; - table[4677] = "user32.dll!NtUserSoundSentry"; - table[4696] = "user32.dll!NtUserUnregisterHotKey"; - table[4524] = "user32.dll!NtUserGetKeyboardState"; - table[4691] = "user32.dll!NtUserUnhookWinEvent"; - table[4621] = "user32.dll!NtUserSendInput"; - table[4658] = "user32.dll!NtUserSetThreadState"; - table[4624] = "user32.dll!NtUserSetCapture"; - table[4633] = "user32.dll!NtUserSetFocus"; - table[4636] = "user32.dll!NtUserSetImeOwnerWindow"; - table[4425] = "user32.dll!NtUserCallHwndParamLock"; - table[4686] = "user32.dll!NtUserCalcMenuBar"; - table[4546] = "user32.dll!NtUserGetTitleBarInfo"; - table[4512] = "user32.dll!NtUserGetDCEx"; - table[4528] = "user32.dll!NtUserGetMenuBarInfo"; - table[4678] = "user32.dll!NtUserSwitchDesktop"; - table[4522] = "user32.dll!NtUserGetKeyboardLayoutList"; - table[4675] = "user32.dll!NtUserShowWindow"; - table[4660] = "user32.dll!NtUserSetProcessDPIAware"; - table[4646] = "user32.dll!NtUserSetParent"; - table[4693] = "user32.dll!NtUserUnlockWindowStation"; - table[4684] = "user32.dll!NtUserTrackMouseEvent"; - table[4608] = "user32.dll!NtUserRegisterHotKey"; - table[4701] = "user32.dll!NtUserSetLayeredWindowAttributes"; - table[4580] = "user32.dll!NtUserMoveWindow"; - table[4699] = "user32.dll!NtUserUpdateLayeredWindow"; - table[4542] = "user32.dll!NtUserGetScrollBarInfo"; - table[4447] = "user32.dll!NtUserCreateAcceleratorTable"; - table[4630] = "user32.dll!NtUserSetCursor"; - table[4586] = "user32.dll!NtUserOpenInputDesktop"; - table[4514] = "user32.dll!NtUserGetForegroundWindow"; - table[4548] = "user32.dll!GetUpdateRect"; - table[4656] = "user32.dll!NtUserSetThreadDesktop"; - table[4536] = "user32.dll!NtUserGetProcessWindowStation"; - table[4647] = "user32.dll!NtUserSetProcessWindowStation"; - table[4605] = "user32.dll!NtUserRegisterClassExWOW"; - table[4494] = "user32.dll!NtUserGetAtomName"; - table[4697] = "user32.dll!NtUserUpdateInputContext"; - table[4661] = "user32.dll!NtUserSetWindowFNID"; - table[4498] = "user32.dll!NtUserGetClassName"; - table[4516] = "user32.dll!NtUserGetGUIThreadInfo"; - table[4585] = "user32.dll!NtUserOpenDesktop"; - table[4419] = "user32.dll!NtUserBuildNameList"; - table[4617] = "user32.dll!NtUserSBGetParms"; - table[4674] = "user32.dll!NtUserShowScrollBar"; - table[4588] = "user32.dll!NtUserOpenWindowStation"; - table[4694] = "user32.dll!NtUserUnregisterClass"; - table[4481] = "user32.dll!NtUserEnumDisplayMonitors"; - table[4462] = "user32.dll!NtUserDestroyWindow"; - table[4441] = "user32.dll!NtUserCloseDesktop"; - table[4459] = "user32.dll!NtUserDestroyCursor"; - table[4442] = "user32.dll!NtUserCloseWindowStation"; - table[4418] = "user32.dll!NtUserBuildHwndList"; - table[4594] = "user32.dll!NtUserPostThreadMessage"; - table[4614] = "user32.dll!NtUserRemoveProp"; - table[4662] = "user32.dll!NtUserSetWindowLong"; - table[4664] = "user32.dll!NtUserSetWindowPos"; - table[4422] = "user32.dll!NtUserCallHwndLock"; - table[4649] = "user32.dll!NtUserSetProp"; - table[4477] = "user32.dll!NtUserEndDeferWindowPosEx"; - table[4455] = "user32.dll!NtUserDeferWindowPos"; - table[4632] = "user32.dll!NtUserSetCursorIconData"; - table[4486] = "user32.dll!NtUserFindExistingCursorIcon"; - table[4533] = "user32.dll!NtUserGetObjectInformation"; - table[4452] = "user32.dll!NtUserCreateWindowEx"; - table[4682] = "user32.dll!NtUserThunkedMenuItemInfo"; - table[4543] = "user32.dll!NtUserGetSystemMenu"; - table[4676] = "user32.dll!NtUserShowWindowAsync"; - table[4600] = "user32.dll!NtUserQueryWindow"; - table[4517] = "user32.dll!NtUserGetIconInfo"; - table[4518] = "user32.dll!NtUserGetIconSize"; - table[4583] = "user32.dll!NtUserNotifyWinEvent"; - table[4562] = "user32.dll!NtUserInternalGetWindowText"; - table[4666] = "user32.dll!NtUserGetWindowRgnEx"; - table[4472] = "user32.dll!NtUserDrawIconEx"; - table[4424] = "user32.dll!NtUserCallHwndParam"; - table[4409] = "user32.dll!NtUserActivateKeyboardLayout"; - table[4629] = "user32.dll!NtUserSetConsoleReserveKeys"; - table[4557] = "user32.dll!NtUserHungWindowFromGhostWindow"; - table[4622] = "user32.dll!NtUserSetActiveWindow"; - table[4544] = "user32.dll!NtUserGetThreadDesktop"; - table[4497] = "user32.dll!NtUserGetClassInfoEx"; - table[4480] = "user32.dll!NtUserEnumDisplayDevices"; - table[4482] = "user32.dll!NtUserEnumDisplaySettings"; - table[4650] = "user32.dll!NtUserSetScrollInfo"; - table[4526] = "user32.dll!NtUserGetKeyState"; - table[4575] = "user32.dll!NtUserMessageCall"; - table[4706] = "user32.dll!NtUserValidateTimerCallback"; - table[4611] = "user32.dll!NtUserRegisterWindowMessage"; - table[4511] = "user32.dll!NtUserGetDC"; - table[4602] = "user32.dll!NtUserRealInternalGetMessage"; - table[4487] = "user32.dll!NtUserFindWindowEx"; - table[4500] = "user32.dll!NtUserGetClipboardFormatName"; - table[4545] = "user32.dll!NtUserGetThreadState"; - table[4679] = "user32.dll!NtUserSystemParametersInfo"; - table[4593] = "user32.dll!NtUserPostMessage"; - table[4659] = "user32.dll!NtUserSetTimer"; - table[4567] = "user32.dll!NtUserKillTimer"; - table[4414] = "user32.dll!NtUserBeginPaint"; - table[4479] = "user32.dll!NtUserEndPaint"; - table[4604] = "user32.dll!NtUserRedrawWindow"; - table[4491] = "user32.dll!NtUserGetAncestor"; - table[4555] = "user32.dll!NtUserHideCaret"; - table[4673] = "user32.dll!NtUserShowCaret"; - table[4448] = "user32.dll!NtUserCreateCaret"; - table[4531] = "user32.dll!NtUserGetMessage"; - table[4591] = "user32.dll!PeekMessageW"; - table[4429] = "user32.dll!NtUserCallOneParam"; - table[4428] = "user32.dll!NtUserCallNoParam"; - table[4464] = "user32.dll!NtUserDispatchMessage"; - table[4648] = "user32.dll!NtUserGetProp"; - table[4550] = "user32.dll!NtUserGetWindowDC"; - table[4513] = "user32.dll!NtUserGetDoubleClickTime"; - table[4710] = "user32.dll!NtUserWaitMessage"; - table[4564] = "user32.dll!NtUserInvalidateRect"; - table[4430] = "user32.dll!NtUserCallTwoParam"; - table[4618] = "user32.dll!NtUserScrollDC"; - table[4704] = "user32.dll!NtUserValidateHandleSecure"; - table[4439] = "user32.dll!NtUserClipCursor"; - table[4571] = "user32.dll!NtUserLockWorkStation"; - table[4724] = "user32.dll!NtUserDwmStopRedirection"; - table[4534] = "user32.dll!NtUserGetOpenClipboardWindow"; - table[4484] = "user32.dll!NtUserExcludeUpdateRgn"; - table[4707] = "user32.dll!NtUserVkKeyScanEx"; - table[4654] = "user32.dll!NtUserSetSystemMenu"; - table[4438] = "user32.dll!NtUserChildWindowFromPointEx"; - table[4671] = "user32.dll!NtUserSetWindowWord"; - table[4476] = "user32.dll!NtUserEnableScrollBar"; - table[4415] = "user32.dll!NtUserBitBltSysBmp"; - table[4509] = "user32.dll!NtUserGetCursorFrameInfo"; - table[4427] = "user32.dll!NtUserCallNextHookEx"; - table[4628] = "user32.dll!NtUserSetClipboardViewer"; - table[4437] = "user32.dll!CheckMenuItem"; - table[4566] = "user32.dll!NtUserIsClipboardFormatAvailable"; - table[4440] = "user32.dll!NtUserCloseClipboard"; - table[4584] = "user32.dll!NtUserOpenClipboard"; - table[4502] = "user32.dll!NtUserGetClipboardSequenceNumber"; - table[4431] = "user32.dll!NtUserChangeClipboardChain"; - table[4688] = "user32.dll!NtUserTranslateAccelerator"; - table[4705] = "user32.dll!NtUserValidateRect"; - table[4667] = "user32.dll!NtUserSetWindowRgnEx"; - table[4475] = "user32.dll!NtUserEnableMenuItem"; - table[4496] = "user32.dll!NtUserGetCaretPos"; - table[4505] = "user32.dll!NtUserGetComboBoxInfo"; - table[4426] = "user32.dll!NtUserCallMsgFilter"; - table[4690] = "user32.dll!NtUserUnhookWindowsHookEx"; - table[4416] = "user32.dll!NtUserBlockInput"; - table[4595] = "user32.dll!NtUserPrintWindow"; - table[4501] = "user32.dll!NtUserGetClipboardOwner"; - table[4413] = "user32.dll!NtUserAttachThreadInput"; - table[4446] = "user32.dll!NtUserCountClipboardFormats"; - table[4572] = "user32.dll!NtUserLogicalToPhysicalPoint"; - table[4592] = "user32.dll!NtUserPhysicalToLogicalPoint"; - table[4712] = "user32.dll!NtUserWindowFromPhysicalPoint"; - table[4685] = "user32.dll!NtUserTrackPopupMenuEx"; - table[4641] = "user32.dll!NtUserSetMenu"; - table[4432] = "user32.dll!NtUserChangeDisplaySettings"; - table[4726] = "user32.dll!NtUserDwmGetDxRgn"; - table[4725] = "user32.dll!NtUserDwmHintDxUpdate"; - table[4573] = "user32.dll!NtUserMapVirtualKeyEx"; - table[4640] = "user32.dll!NtUserSetKeyboardState"; - table[4708] = "user32.dll!NtUserWaitForInputIdle"; - table[4549] = "user32.dll!NtUserGetUpdateRgn"; - table[4456] = "user32.dll!NtUserDefSetText"; - table[4506] = "user32.dll!NtUserGetControlBrush"; - table[4488] = "user32.dll!NtUserFlashWindowEx"; - table[4689] = "user32.dll!NtUserTranslateMessage"; - table[4619] = "user32.dll!NtUserScrollWindowEx"; - table[4687] = "user32.dll!NtUserPaintMenuBar"; - table[4551] = "user32.dll!NtUserGetWindowPlacement"; - table[4713] = "user32.dll!NtUserWindowFromPoint"; - table[4410] = "user32.dll!NtUserAddClipboardFormatListener"; - table[4411] = "user32.dll!NtUserAlterWindowStyle"; - table[4420] = "user32.dll!NtUserBuildPropList"; - table[4433] = "user32.dll!NtUserCheckAccessForIntegrityLevel"; - table[4435] = "user32.dll!NtUserCheckWindowThreadDesktop"; - table[4444] = "user32.dll!NtUserConvertMemHandle"; - table[4451] = "user32.dll!NtUserCreateLocalMemHandle"; - table[4466] = "user32.dll!NtUserDoSoundDisconnect"; - table[4467] = "user32.dll!NtUserDragDetect"; - table[4468] = "user32.dll!NtUserDragObject"; - table[4469] = "user32.dll!NtUserDrawAnimatedRects"; - table[4470] = "user32.dll!NtUserDrawCaption"; - table[4471] = "user32.dll!NtUserDrawCaptionTemp"; - table[4473] = "user32.dll!NtUserDrawMenuBarTemp"; - table[4474] = "user32.dll!NtUserEmptyClipboard"; - table[4483] = "user32.dll!NtUserEvent"; - table[4489] = "user32.dll!NtUserFrostCrashedWindow"; - table[4490] = "user32.dll!NtUserGetAltTabInfo"; - table[4499] = "user32.dll!NtUserGetClipboardData"; - table[4503] = "user32.dll!NtUserGetClipboardViewer"; - table[4504] = "user32.dll!NtUserGetClipCursor"; - table[4507] = "user32.dll!NtUserGetControlColor"; - table[4510] = "user32.dll!NtUserGetCursorInfo"; - table[4515] = "user32.dll!NtUserGetGuiResources"; - table[4519] = "user32.dll!NtUserGetImeHotKey"; - table[4521] = "user32.dll!NtUserGetInternalWindowPos"; - table[4523] = "user32.dll!NtUserGetKeyboardLayoutName"; - table[4525] = "user32.dll!NtUserGetKeyNameText"; - table[4527] = "user32.dll!NtUserGetListBoxInfo"; - table[4529] = "user32.dll!NtUserGetMenuIndex"; - table[4530] = "user32.dll!NtUserGetMenuItemRect"; - table[4532] = "user32.dll!NtUserGetMouseMovePointsEx"; - table[4535] = "user32.dll!NtUserGetPriorityClipboardFormat"; - table[4537] = "user32.dll!NtUserGetRawInputBuffer"; - table[4538] = "user32.dll!NtUserGetRawInputData"; - table[4539] = "user32.dll!NtUserGetRawInputDeviceInfo"; - table[4540] = "user32.dll!NtUserGetRawInputDeviceList"; - table[4541] = "user32.dll!NtUserGetRegisteredRawInputDevices"; - table[4547] = "user32.dll!NtUserGetUpdatedClipboardFormats"; - table[4552] = "user32.dll!NtUserGetWOWClass"; - table[4556] = "user32.dll!NtUserHiliteMenuItem"; - table[4558] = "user32.dll!NtUserImpersonateDdeClientWindow"; - table[4561] = "user32.dll!NtUserInitTask"; - table[4563] = "user32.dll!NtUserInternalGetWindowIcon"; - table[4574] = "user32.dll!NtUserMenuItemFromPoint"; - table[4576] = "user32.dll!NtUserMinMaximize"; - table[4577] = "user32.dll!NtUserMNDragLeave"; - table[4578] = "user32.dll!NtUserMNDragOver"; - table[4579] = "user32.dll!NtUserModifyUserStartupInfoFlags"; - table[4581] = "user32.dll!NtUserNotifyIMEStatus"; - table[4587] = "user32.dll!NtUserOpenThreadDesktop"; - table[4599] = "user32.dll!NtUserQuerySendMessage"; - table[4601] = "user32.dll!NtUserRealChildWindowFromPoint"; - table[4603] = "user32.dll!NtUserRealWaitMessageEx"; - table[4606] = "user32.dll!NtUserRegisterErrorReportingDialog"; - table[4610] = "user32.dll!NtUserRegisterTasklist"; - table[4612] = "user32.dll!NtUserRemoveClipboardFormatListener"; - table[4616] = "user32.dll!NtUserResolveDesktopForWOW"; - table[4626] = "user32.dll!NtUserSetClassWord"; - table[4627] = "user32.dll!NtUserSetClipboardData"; - table[4631] = "user32.dll!NtUserSetCursorContents"; - table[4639] = "user32.dll!NtUserSetInternalWindowPos"; - table[4642] = "user32.dll!NtUserSetMenuContextHelpId"; - table[4644] = "user32.dll!NtUserSetMenuFlagRtoL"; - table[4645] = "user32.dll!NtUserSetObjectInformation"; - table[4652] = "user32.dll!NtUserSetSysColors"; - table[4653] = "user32.dll!NtUserSetSystemCursor"; - table[4655] = "user32.dll!NtUserSetSystemTimer"; - table[4668] = "user32.dll!NtUserSetWindowsHookAW"; - table[4680] = "user32.dll!NtUserTestForInteractiveUser"; - table[4683] = "user32.dll!NtUserToUnicodeEx"; - table[4692] = "user32.dll!NtUserUnloadKeyboardLayout"; - table[4698] = "user32.dll!NtUserUpdateInstance"; - table[4700] = "user32.dll!NtUserGetLayeredWindowAttributes"; - table[4703] = "user32.dll!NtUserUserHandleGrantAccess"; - table[4709] = "user32.dll!NtUserWaitForMsgAndEvent"; - table[4711] = "user32.dll!NtUserWin32PoolAllocationStats"; - table[4714] = "user32.dll!NtUserYieldTask"; - table[4721] = "user32.dll!NtUserUnregisterSessionPort"; - table[4722] = "user32.dll!NtUserUpdateWindowTransform"; - table[4866] = "user32.dll!NtUserSetMirrorRendering"; - table[4867] = "user32.dll!NtUserShowSystemCursor"; -} - - return table; -} - -#endif // TRACELINE_SYSCALL_MAP_H_ diff --git a/chromium/tools/unused-symbols-report.py b/chromium/tools/unused-symbols-report.py deleted file mode 100755 index 900bf16e120..00000000000 --- a/chromium/tools/unused-symbols-report.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Prints a report of symbols stripped by the linker due to being unused. - -To use, build with these linker flags: - -Wl,--gc-sections - -Wl,--print-gc-sections -the first one is the default in Release; search build/common.gypi for it -and to see where to add the other. - -Then build, saving the output into a file: - make chrome 2>&1 | tee buildlog -and run this script on it: - ./tools/unused-symbols-report.py buildlog > report.html -""" - -import cgi -import optparse -import os -import re -import subprocess -import sys - -cppfilt_proc = None -def Demangle(sym): - """Demangle a C++ symbol by passing it through c++filt.""" - global cppfilt_proc - if cppfilt_proc is None: - cppfilt_proc = subprocess.Popen(['c++filt'], stdin=subprocess.PIPE, - stdout=subprocess.PIPE) - print >>cppfilt_proc.stdin, sym - return cppfilt_proc.stdout.readline().strip() - - -def Unyuck(sym): - """Attempt to prettify a C++ symbol by some basic heuristics.""" - sym = sym.replace('std::basic_string, ' - 'std::allocator >', 'std::string') - sym = sym.replace('std::basic_string, ' - 'std::allocator >', 'std::wstring') - sym = sym.replace('std::basic_string >', 'string16') - sym = re.sub(r', std::allocator<\S+\s+>', '', sym) - return sym - - -def Parse(input, skip_paths=None, only_paths=None): - """Parse the --print-gc-sections build output. - - Args: - input: iterable over the lines of the build output - - Yields: - (target name, path to .o file, demangled symbol) - """ - symbol_re = re.compile(r"'\.text\.(\S+)' in file '(\S+)'$") - path_re = re.compile(r"^out/[^/]+/[^/]+/([^/]+)/(.*)$") - for line in input: - match = symbol_re.search(line) - if not match: - continue - symbol, path = match.groups() - symbol = Unyuck(Demangle(symbol)) - path = os.path.normpath(path) - if skip_paths and skip_paths in path: - continue - if only_paths and only_paths not in path: - continue - match = path_re.match(path) - if not match: - print >>sys.stderr, "Skipping weird path", path - continue - target, path = match.groups() - yield target, path, symbol - - -# HTML header for our output page. -TEMPLATE_HEADER = """ - - - - -

chrome symbols deleted at link time

-""" - - -def Output(iter): - """Print HTML given an iterable of (target, path, symbol) tuples.""" - targets = {} - for target, path, symbol in iter: - entries = targets.setdefault(target, []) - entries.append((symbol, path)) - - print TEMPLATE_HEADER - print "

jump to target:" - print "

" - - for target in sorted(targets.keys()): - print "
" - print "" - for symbol, path in sorted(targets[target]): - htmlsymbol = cgi.escape(symbol).replace('::', '::') - print "" % htmlsymbol - print "" % path - print "
%s
%s
" - - -def main(): - parser = optparse.OptionParser(usage='%prog [options] buildoutput\n\n' + - __doc__) - parser.add_option("--skip-paths", metavar="STR", default="third_party", - help="skip paths matching STR [default=%default]") - parser.add_option("--only-paths", metavar="STR", - help="only include paths matching STR [default=%default]") - opts, args = parser.parse_args() - - if len(args) < 1: - parser.print_help() - sys.exit(1) - - iter = Parse(open(args[0]), - skip_paths=opts.skip_paths, - only_paths=opts.only_paths) - Output(iter) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/update_reference_build.py b/chromium/tools/update_reference_build.py deleted file mode 100755 index 112599b8c12..00000000000 --- a/chromium/tools/update_reference_build.py +++ /dev/null @@ -1,335 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Updates the Chrome reference builds. - -Use -r option to update a Chromium reference build, or -b option for Chrome -official builds. - -Usage: - $ cd /tmp - $ /path/to/update_reference_build.py -r - $ cd reference_builds/reference_builds - $ gcl change - $ gcl upload - $ gcl commit -""" - -import logging -import optparse -import os -import shutil -import subprocess -import sys -import time -import urllib -import urllib2 -import zipfile - -# Example chromium build location: -# gs://chromium-browser-snapshots/Linux/228977/chrome-linux.zip -CHROMIUM_URL_FMT = ('http://commondatastorage.googleapis.com/' - 'chromium-browser-snapshots/%s/%s/%s') - -# Chrome official build storage -# https://wiki.corp.google.com/twiki/bin/view/Main/ChromeOfficialBuilds - -# Internal Google archive of official Chrome builds, example: -# https://goto.google.com/chrome_official_builds/ -# 32.0.1677.0/precise32bit/chrome-precise32bit.zip -CHROME_INTERNAL_URL_FMT = ('http://master.chrome.corp.google.com/' - 'official_builds/%s/%s/%s') - -# Google storage location (no public web URL's), example: -# gs://chrome-archive/30/30.0.1595.0/precise32bit/chrome-precise32bit.zip -CHROME_GS_URL_FMT = ('gs://chrome-archive/%s/%s/%s/%s') - - -class BuildUpdater(object): - _PLATFORM_FILES_MAP = { - 'Win': [ - 'chrome-win32.zip', - 'chrome-win32-syms.zip', - ], - 'Mac': [ - 'chrome-mac.zip', - ], - 'Linux': [ - 'chrome-linux.zip', - ], - 'Linux_x64': [ - 'chrome-linux.zip', - ], - } - - _CHROME_PLATFORM_FILES_MAP = { - 'Win': [ - 'chrome-win32.zip', - 'chrome-win32-syms.zip', - ], - 'Mac': [ - 'chrome-mac.zip', - ], - 'Linux': [ - 'chrome-precise32bit.zip', - ], - 'Linux_x64': [ - 'chrome-precise64bit.zip', - ], - } - - # Map of platform names to gs:// Chrome build names. - _BUILD_PLATFORM_MAP = { - 'Linux': 'precise32bit', - 'Linux_x64': 'precise64bit', - 'Win': 'win', - 'Mac': 'mac', - } - - _PLATFORM_DEST_MAP = { - 'Linux': 'chrome_linux', - 'Linux_x64': 'chrome_linux64', - 'Win': 'chrome_win', - 'Mac': 'chrome_mac', - } - - def __init__(self, options): - self._platforms = options.platforms.split(',') - self._revision = options.build_number or int(options.revision) - self._use_build_number = bool(options.build_number) - self._use_gs = options.use_gs - - @staticmethod - def _GetCmdStatusAndOutput(args, cwd=None, shell=False): - """Executes a subprocess and returns its exit code and output. - - Args: - args: A string or a sequence of program arguments. - cwd: If not None, the subprocess's current directory will be changed to - |cwd| before it's executed. - shell: Whether to execute args as a shell command. - - Returns: - The tuple (exit code, output). - """ - logging.info(str(args) + ' ' + (cwd or '')) - p = subprocess.Popen(args=args, cwd=cwd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, shell=shell) - stdout, stderr = p.communicate() - exit_code = p.returncode - if stderr: - logging.critical(stderr) - logging.info(stdout) - return (exit_code, stdout) - - def _GetBuildUrl(self, platform, revision, filename): - if self._use_build_number: - # Chrome Google storage bucket. - if self._use_gs: - release = revision[:revision.find('.')] - return (CHROME_GS_URL_FMT % ( - release, - revision, - self._BUILD_PLATFORM_MAP[platform], - filename)) - # Chrome internal archive. - return (CHROME_INTERNAL_URL_FMT % ( - revision, - self._BUILD_PLATFORM_MAP[platform], - filename)) - # Chromium archive. - return CHROMIUM_URL_FMT % (urllib.quote_plus(platform), revision, filename) - - def _FindBuildRevision(self, platform, revision, filename): - # TODO(shadi): Iterate over build numbers to find a valid one. - if self._use_build_number: - return (revision - if self._DoesBuildExist(platform, revision, filename) else None) - - MAX_REVISIONS_PER_BUILD = 100 - for revision_guess in xrange(revision, revision + MAX_REVISIONS_PER_BUILD): - if self._DoesBuildExist(platform, revision_guess, filename): - return revision_guess - else: - time.sleep(.1) - return None - - def _DoesBuildExist(self, platform, build_number, filename): - url = self._GetBuildUrl(platform, build_number, filename) - if self._use_gs: - return self._DoesGSFileExist(url) - - r = urllib2.Request(url) - r.get_method = lambda: 'HEAD' - try: - urllib2.urlopen(r) - return True - except urllib2.HTTPError, err: - if err.code == 404: - return False - - def _DoesGSFileExist(self, gs_file_name): - exit_code = BuildUpdater._GetCmdStatusAndOutput( - ['gsutil', 'ls', gs_file_name])[0] - return not exit_code - - def _GetPlatformFiles(self, platform): - if self._use_build_number: - return BuildUpdater._CHROME_PLATFORM_FILES_MAP[platform] - return BuildUpdater._PLATFORM_FILES_MAP[platform] - - def _DownloadBuilds(self): - for platform in self._platforms: - for f in self._GetPlatformFiles(platform): - output = os.path.join('dl', platform, - '%s_%s_%s' % (platform, self._revision, f)) - if os.path.exists(output): - logging.info('%s alread exists, skipping download', output) - continue - build_revision = self._FindBuildRevision(platform, self._revision, f) - if not build_revision: - logging.critical('Failed to find %s build for r%s\n', platform, - self._revision) - sys.exit(1) - dirname = os.path.dirname(output) - if dirname and not os.path.exists(dirname): - os.makedirs(dirname) - url = self._GetBuildUrl(platform, build_revision, f) - self._DownloadFile(url, output) - - def _DownloadFile(self, url, output): - logging.info('Downloading %s, saving to %s', url, output) - if self._use_build_number and self._use_gs: - BuildUpdater._GetCmdStatusAndOutput(['gsutil', 'cp', url, output]) - else: - r = urllib2.urlopen(url) - with file(output, 'wb') as f: - f.write(r.read()) - - def _FetchSvnRepos(self): - if not os.path.exists('reference_builds'): - os.makedirs('reference_builds') - BuildUpdater._GetCmdStatusAndOutput( - ['gclient', 'config', - 'svn://svn.chromium.org/chrome/trunk/deps/reference_builds'], - 'reference_builds') - BuildUpdater._GetCmdStatusAndOutput( - ['gclient', 'sync'], 'reference_builds') - - def _UnzipFile(self, dl_file, dest_dir): - if not zipfile.is_zipfile(dl_file): - return False - logging.info('Opening %s', dl_file) - with zipfile.ZipFile(dl_file, 'r') as z: - for content in z.namelist(): - dest = os.path.join(dest_dir, content[content.find('/')+1:]) - # Create dest parent dir if it does not exist. - if not os.path.isdir(os.path.dirname(dest)): - os.makedirs(os.path.dirname(dest)) - # If dest is just a dir listing, do nothing. - if not os.path.basename(dest): - continue - if not os.path.isdir(os.path.dirname(dest)): - os.makedirs(os.path.dirname(dest)) - with z.open(content) as unzipped_content: - logging.info('Extracting %s to %s (%s)', content, dest, dl_file) - with file(dest, 'wb') as dest_file: - dest_file.write(unzipped_content.read()) - permissions = z.getinfo(content).external_attr >> 16 - if permissions: - os.chmod(dest, permissions) - return True - - def _ClearDir(self, dir): - """Clears all files in |dir| except for hidden files and folders.""" - for root, dirs, files in os.walk(dir): - # Skip hidden files and folders (like .svn and .git). - files = [f for f in files if f[0] != '.'] - dirs[:] = [d for d in dirs if d[0] != '.'] - - for f in files: - os.remove(os.path.join(root, f)) - - def _ExtractBuilds(self): - for platform in self._platforms: - if os.path.exists('tmp_unzip'): - os.path.unlink('tmp_unzip') - dest_dir = os.path.join('reference_builds', 'reference_builds', - BuildUpdater._PLATFORM_DEST_MAP[platform]) - self._ClearDir(dest_dir) - for root, _, dl_files in os.walk(os.path.join('dl', platform)): - for dl_file in dl_files: - dl_file = os.path.join(root, dl_file) - if not self._UnzipFile(dl_file, dest_dir): - logging.info('Copying %s to %s', dl_file, dest_dir) - shutil.copy(dl_file, dest_dir) - - def _SvnAddAndRemove(self): - svn_dir = os.path.join('reference_builds', 'reference_builds') - # List all changes without ignoring any files. - stat = BuildUpdater._GetCmdStatusAndOutput(['svn', 'stat', '--no-ignore'], - svn_dir)[1] - for line in stat.splitlines(): - action, filename = line.split(None, 1) - # Add new and ignored files. - if action == '?' or action == 'I': - BuildUpdater._GetCmdStatusAndOutput( - ['svn', 'add', filename], svn_dir) - elif action == '!': - BuildUpdater._GetCmdStatusAndOutput( - ['svn', 'delete', filename], svn_dir) - filepath = os.path.join(svn_dir, filename) - if not os.path.isdir(filepath) and os.access(filepath, os.X_OK): - BuildUpdater._GetCmdStatusAndOutput( - ['svn', 'propset', 'svn:executable', 'true', filename], svn_dir) - - def DownloadAndUpdateBuilds(self): - self._DownloadBuilds() - self._FetchSvnRepos() - self._ExtractBuilds() - self._SvnAddAndRemove() - - -def ParseOptions(argv): - parser = optparse.OptionParser() - usage = 'usage: %prog ' - parser.set_usage(usage) - parser.add_option('-b', dest='build_number', - help='Chrome official build number to pick up.') - parser.add_option('--gs', dest='use_gs', action='store_true', default=False, - help='Use Google storage for official builds. Used with -b ' - 'option. Default is false (i.e. use internal storage.') - parser.add_option('-p', dest='platforms', - default='Win,Mac,Linux,Linux_x64', - help='Comma separated list of platforms to download ' - '(as defined by the chromium builders).') - parser.add_option('-r', dest='revision', - help='Revision to pick up.') - - (options, _) = parser.parse_args(argv) - if not options.revision and not options.build_number: - logging.critical('Must specify either -r or -b.\n') - sys.exit(1) - if options.revision and options.build_number: - logging.critical('Must specify either -r or -b but not both.\n') - sys.exit(1) - if options.use_gs and not options.build_number: - logging.critical('Can only use --gs with -b option.\n') - sys.exit(1) - - return options - - -def main(argv): - logging.getLogger().setLevel(logging.DEBUG) - options = ParseOptions(argv) - b = BuildUpdater(options) - b.DownloadAndUpdateBuilds() - logging.info('Successfully updated reference builds. Move to ' - 'reference_builds/reference_builds and make a change with gcl.') - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/chromium/tools/usb_ids/usb_ids.py b/chromium/tools/usb_ids/usb_ids.py deleted file mode 100644 index e07bd4ca6f7..00000000000 --- a/chromium/tools/usb_ids/usb_ids.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import itertools -import optparse -import re - -VENDOR_PATTERN = re.compile("^(?P[0-9a-fA-F]{4})\s+(?P.+)$") -PRODUCT_PATTERN = re.compile("^\t(?P[0-9a-fA-F]{4})\s+(?P.+)$") - -def EscapeName(name): - name = name.replace("\\", "\\\\") - name = name.replace("\"", "\\\"") - name = name.replace("?", "\?") - return name - -def ParseTable(input_path): - input_file = open(input_path, "r") - input = input_file.read().split("\n") - input_file.close() - - table = {} - vendor = None - - for line in input: - vendor_match = VENDOR_PATTERN.match(line) - if vendor_match: - if vendor: - table[vendor["id"]] = vendor - vendor = {} - vendor["id"] = int(vendor_match.group("id"), 16) - vendor["name"] = vendor_match.group("name") - vendor["products"] = [] - continue - - product_match = PRODUCT_PATTERN.match(line) - if product_match: - if not vendor: - raise Exception("Product seems to appear before vendor.") - product = {} - product["id"] = int(product_match.group("id"), 16) - product["name"] = product_match.group("name") - vendor["products"].append(product) - - return table - -def GenerateDeviceDefinitions(table): - output = "" - - for vendor_id in sorted(table.keys()): - vendor = table[vendor_id] - if len(vendor["products"]) == 0: - continue - - output += "static const UsbProduct vendor_%.4x_products[] = {\n" % \ - vendor["id"] - for product in vendor["products"]: - output += " {0x%.4x, \"%s\"},\n" % (product["id"], - EscapeName(product["name"])) - output += "};\n" - - return output - -def GenerateVendorDefinitions(table): - output = "const size_t UsbIds::vendor_size_ = %d;\n" % len(table.keys()) - output += "const UsbVendor UsbIds::vendors_[] = {\n" - - for vendor_id in sorted(table.keys()): - vendor = table[vendor_id] - - product_table = "NULL" - if len(vendor["products"]) != 0: - product_table = "vendor_%.4x_products" % (vendor["id"]) - output += " {0x%.4x, \"%s\", %d, %s},\n" % (vendor["id"], - EscapeName(vendor["name"]), len(vendor["products"]), product_table) - - output += "};\n" - return output - -if __name__ == "__main__": - parser = optparse.OptionParser( - description="Generates a C++ USB ID lookup table.") - parser.add_option("-i", "--input", help="Path to usb.ids") - parser.add_option("-o", "--output", help="Output file path") - - (opts, args) = parser.parse_args() - table = ParseTable(opts.input) - - output = """// Generated from %s -#ifndef GENERATED_USB_IDS_H_ -#define GENERATED_USB_IDS_H_ - -#include "device/usb/usb_ids.h" - -namespace device { - -""" % (opts.input) - output += GenerateDeviceDefinitions(table) - output += GenerateVendorDefinitions(table) - output += """ - -} // namespace device - -#endif // GENERATED_USB_IDS_H_ -""" - - output_file = open(opts.output, "w+") - output_file.write(output) - output_file.close() diff --git a/chromium/tools/valgrind/OWNERS b/chromium/tools/valgrind/OWNERS deleted file mode 100644 index 73ce47c70ef..00000000000 --- a/chromium/tools/valgrind/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -set noparent -bruening@chromium.org -glider@chromium.org -thestig@chromium.org -timurrrr@chromium.org diff --git a/chromium/tools/valgrind/asan/asan_symbolize.py b/chromium/tools/valgrind/asan/asan_symbolize.py deleted file mode 100755 index 06ff5925096..00000000000 --- a/chromium/tools/valgrind/asan/asan_symbolize.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -from third_party import asan_symbolize - -import os -import re -import sys - -def fix_filename(file_name): - for path_to_cut in sys.argv[1:]: - file_name = re.sub(".*" + path_to_cut, "", file_name) - file_name = re.sub(".*asan_[a-z_]*.cc:[0-9]*", "_asan_rtl_", file_name) - file_name = re.sub(".*crtstuff.c:0", "???:0", file_name) - return file_name - -class Unbuffered(object): - """Disable buffering on a file object.""" - def __init__(self, stream): - self.stream = stream - - def write(self, data): - self.stream.write(data) - if '\n' in data: - self.stream.flush() - - def __getattr__(self, attr): - return getattr(self.stream, attr) - - -def disable_buffering(): - """Makes this process and child processes stdout unbuffered.""" - if not os.environ.get('PYTHONUNBUFFERED'): - # Since sys.stdout is a C++ object, it's impossible to do - # sys.stdout.write = lambda... - sys.stdout = Unbuffered(sys.stdout) - os.environ['PYTHONUNBUFFERED'] = 'x' - - -def main(): - disable_buffering() - loop = asan_symbolize.SymbolizationLoop(binary_name_filter=fix_filename) - loop.process_stdin() - -if __name__ == '__main__': - main() diff --git a/chromium/tools/valgrind/asan/asan_wrapper.sh b/chromium/tools/valgrind/asan/asan_wrapper.sh deleted file mode 100755 index 4e34fed5a09..00000000000 --- a/chromium/tools/valgrind/asan/asan_wrapper.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# A wrapper that runs the program and filters the output through -# asan_symbolize.py and c++filt -# -# TODO(glider): this should be removed once EmbeddedTool in valgrind_test.py -# starts supporting pipes. - -export THISDIR=`dirname $0` -"$@" 2>&1 | - $THISDIR/asan_symbolize.py | - c++filt diff --git a/chromium/tools/valgrind/asan/third_party/README.chromium b/chromium/tools/valgrind/asan/third_party/README.chromium deleted file mode 100644 index f9e6c9be5bc..00000000000 --- a/chromium/tools/valgrind/asan/third_party/README.chromium +++ /dev/null @@ -1,6 +0,0 @@ -Name: asan_symbolize.py -License: University of Illinois Open Source License. -Version: 183006 -URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?view=co&content-type=text%2Fplain - -asan_symbolize.py is a verbatim copy of asan_symbolize.py in the LLVM trunk. diff --git a/chromium/tools/valgrind/asan/third_party/__init__.py b/chromium/tools/valgrind/asan/third_party/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/chromium/tools/valgrind/asan/third_party/asan_symbolize.py b/chromium/tools/valgrind/asan/third_party/asan_symbolize.py deleted file mode 100755 index 207928f6eae..00000000000 --- a/chromium/tools/valgrind/asan/third_party/asan_symbolize.py +++ /dev/null @@ -1,365 +0,0 @@ -#!/usr/bin/env python -#===- lib/asan/scripts/asan_symbolize.py -----------------------------------===# -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -#===------------------------------------------------------------------------===# -import bisect -import getopt -import os -import re -import subprocess -import sys - -llvm_symbolizer = None -symbolizers = {} -DEBUG = False -demangle = False; - - -# FIXME: merge the code that calls fix_filename(). -def fix_filename(file_name): - for path_to_cut in sys.argv[1:]: - file_name = re.sub('.*' + path_to_cut, '', file_name) - file_name = re.sub('.*asan_[a-z_]*.cc:[0-9]*', '_asan_rtl_', file_name) - file_name = re.sub('.*crtstuff.c:0', '???:0', file_name) - return file_name - - -class Symbolizer(object): - def __init__(self): - pass - - def symbolize(self, addr, binary, offset): - """Symbolize the given address (pair of binary and offset). - - Overriden in subclasses. - Args: - addr: virtual address of an instruction. - binary: path to executable/shared object containing this instruction. - offset: instruction offset in the @binary. - Returns: - list of strings (one string for each inlined frame) describing - the code locations for this instruction (that is, function name, file - name, line and column numbers). - """ - return None - - -class LLVMSymbolizer(Symbolizer): - def __init__(self, symbolizer_path): - super(LLVMSymbolizer, self).__init__() - self.symbolizer_path = symbolizer_path - self.pipe = self.open_llvm_symbolizer() - - def open_llvm_symbolizer(self): - if not os.path.exists(self.symbolizer_path): - return None - cmd = [self.symbolizer_path, - '--use-symbol-table=true', - '--demangle=%s' % demangle, - '--functions=true', - '--inlining=true'] - if DEBUG: - print ' '.join(cmd) - return subprocess.Popen(cmd, stdin=subprocess.PIPE, - stdout=subprocess.PIPE) - - def symbolize(self, addr, binary, offset): - """Overrides Symbolizer.symbolize.""" - if not self.pipe: - return None - result = [] - try: - symbolizer_input = '%s %s' % (binary, offset) - if DEBUG: - print symbolizer_input - print >> self.pipe.stdin, symbolizer_input - while True: - function_name = self.pipe.stdout.readline().rstrip() - if not function_name: - break - file_name = self.pipe.stdout.readline().rstrip() - file_name = fix_filename(file_name) - if (not function_name.startswith('??') and - not file_name.startswith('??')): - # Append only valid frames. - result.append('%s in %s %s' % (addr, function_name, - file_name)) - except Exception: - result = [] - if not result: - result = None - return result - - -def LLVMSymbolizerFactory(system): - symbolizer_path = os.getenv('LLVM_SYMBOLIZER_PATH') - if not symbolizer_path: - # Assume llvm-symbolizer is in PATH. - symbolizer_path = 'llvm-symbolizer' - return LLVMSymbolizer(symbolizer_path) - - -class Addr2LineSymbolizer(Symbolizer): - def __init__(self, binary): - super(Addr2LineSymbolizer, self).__init__() - self.binary = binary - self.pipe = self.open_addr2line() - - def open_addr2line(self): - cmd = ['addr2line', '-f'] - if demangle: - cmd += ['--demangle'] - cmd += ['-e', self.binary] - if DEBUG: - print ' '.join(cmd) - return subprocess.Popen(cmd, - stdin=subprocess.PIPE, stdout=subprocess.PIPE) - - def symbolize(self, addr, binary, offset): - """Overrides Symbolizer.symbolize.""" - if self.binary != binary: - return None - try: - print >> self.pipe.stdin, offset - function_name = self.pipe.stdout.readline().rstrip() - file_name = self.pipe.stdout.readline().rstrip() - except Exception: - function_name = '' - file_name = '' - file_name = fix_filename(file_name) - return ['%s in %s %s' % (addr, function_name, file_name)] - - -class DarwinSymbolizer(Symbolizer): - def __init__(self, addr, binary): - super(DarwinSymbolizer, self).__init__() - self.binary = binary - # Guess which arch we're running. 10 = len('0x') + 8 hex digits. - if len(addr) > 10: - self.arch = 'x86_64' - else: - self.arch = 'i386' - self.pipe = None - - def write_addr_to_pipe(self, offset): - print >> self.pipe.stdin, '0x%x' % int(offset, 16) - - def open_atos(self): - if DEBUG: - print 'atos -o %s -arch %s' % (self.binary, self.arch) - cmdline = ['atos', '-o', self.binary, '-arch', self.arch] - self.pipe = subprocess.Popen(cmdline, - stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - - def symbolize(self, addr, binary, offset): - """Overrides Symbolizer.symbolize.""" - if self.binary != binary: - return None - self.open_atos() - self.write_addr_to_pipe(offset) - self.pipe.stdin.close() - atos_line = self.pipe.stdout.readline().rstrip() - # A well-formed atos response looks like this: - # foo(type1, type2) (in object.name) (filename.cc:80) - match = re.match('^(.*) \(in (.*)\) \((.*:\d*)\)$', atos_line) - if DEBUG: - print 'atos_line: ', atos_line - if match: - function_name = match.group(1) - function_name = re.sub('\(.*?\)', '', function_name) - file_name = fix_filename(match.group(3)) - return ['%s in %s %s' % (addr, function_name, file_name)] - else: - return ['%s in %s' % (addr, atos_line)] - - -# Chain several symbolizers so that if one symbolizer fails, we fall back -# to the next symbolizer in chain. -class ChainSymbolizer(Symbolizer): - def __init__(self, symbolizer_list): - super(ChainSymbolizer, self).__init__() - self.symbolizer_list = symbolizer_list - - def symbolize(self, addr, binary, offset): - """Overrides Symbolizer.symbolize.""" - for symbolizer in self.symbolizer_list: - if symbolizer: - result = symbolizer.symbolize(addr, binary, offset) - if result: - return result - return None - - def append_symbolizer(self, symbolizer): - self.symbolizer_list.append(symbolizer) - - -def BreakpadSymbolizerFactory(binary): - suffix = os.getenv('BREAKPAD_SUFFIX') - if suffix: - filename = binary + suffix - if os.access(filename, os.F_OK): - return BreakpadSymbolizer(filename) - return None - - -def SystemSymbolizerFactory(system, addr, binary): - if system == 'Darwin': - return DarwinSymbolizer(addr, binary) - elif system == 'Linux': - return Addr2LineSymbolizer(binary) - - -class BreakpadSymbolizer(Symbolizer): - def __init__(self, filename): - super(BreakpadSymbolizer, self).__init__() - self.filename = filename - lines = file(filename).readlines() - self.files = [] - self.symbols = {} - self.address_list = [] - self.addresses = {} - # MODULE mac x86_64 A7001116478B33F18FF9BEDE9F615F190 t - fragments = lines[0].rstrip().split() - self.arch = fragments[2] - self.debug_id = fragments[3] - self.binary = ' '.join(fragments[4:]) - self.parse_lines(lines[1:]) - - def parse_lines(self, lines): - cur_function_addr = '' - for line in lines: - fragments = line.split() - if fragments[0] == 'FILE': - assert int(fragments[1]) == len(self.files) - self.files.append(' '.join(fragments[2:])) - elif fragments[0] == 'PUBLIC': - self.symbols[int(fragments[1], 16)] = ' '.join(fragments[3:]) - elif fragments[0] in ['CFI', 'STACK']: - pass - elif fragments[0] == 'FUNC': - cur_function_addr = int(fragments[1], 16) - if not cur_function_addr in self.symbols.keys(): - self.symbols[cur_function_addr] = ' '.join(fragments[4:]) - else: - # Line starting with an address. - addr = int(fragments[0], 16) - self.address_list.append(addr) - # Tuple of symbol address, size, line, file number. - self.addresses[addr] = (cur_function_addr, - int(fragments[1], 16), - int(fragments[2]), - int(fragments[3])) - self.address_list.sort() - - def get_sym_file_line(self, addr): - key = None - if addr in self.addresses.keys(): - key = addr - else: - index = bisect.bisect_left(self.address_list, addr) - if index == 0: - return None - else: - key = self.address_list[index - 1] - sym_id, size, line_no, file_no = self.addresses[key] - symbol = self.symbols[sym_id] - filename = self.files[file_no] - if addr < key + size: - return symbol, filename, line_no - else: - return None - - def symbolize(self, addr, binary, offset): - if self.binary != binary: - return None - res = self.get_sym_file_line(int(offset, 16)) - if res: - function_name, file_name, line_no = res - result = ['%s in %s %s:%d' % ( - addr, function_name, file_name, line_no)] - print result - return result - else: - return None - - -class SymbolizationLoop(object): - def __init__(self, binary_name_filter=None): - # Used by clients who may want to supply a different binary name. - # E.g. in Chrome several binaries may share a single .dSYM. - self.binary_name_filter = binary_name_filter - self.system = os.uname()[0] - if self.system in ['Linux', 'Darwin']: - self.llvm_symbolizer = LLVMSymbolizerFactory(self.system) - else: - raise Exception('Unknown system') - - def symbolize_address(self, addr, binary, offset): - # Use the chain of symbolizers: - # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos - # (fall back to next symbolizer if the previous one fails). - if not binary in symbolizers: - symbolizers[binary] = ChainSymbolizer( - [BreakpadSymbolizerFactory(binary), self.llvm_symbolizer]) - result = symbolizers[binary].symbolize(addr, binary, offset) - if result is None: - # Initialize system symbolizer only if other symbolizers failed. - symbolizers[binary].append_symbolizer( - SystemSymbolizerFactory(self.system, addr, binary)) - result = symbolizers[binary].symbolize(addr, binary, offset) - # The system symbolizer must produce some result. - assert result - return result - - def print_symbolized_lines(self, symbolized_lines): - if not symbolized_lines: - print self.current_line - else: - for symbolized_frame in symbolized_lines: - print ' #' + str(self.frame_no) + ' ' + symbolized_frame.rstrip() - self.frame_no += 1 - - def process_stdin(self): - self.frame_no = 0 - while True: - line = sys.stdin.readline() - if not line: - break - self.current_line = line.rstrip() - #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) - stack_trace_line_format = ( - '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') - match = re.match(stack_trace_line_format, line) - if not match: - print self.current_line - continue - if DEBUG: - print line - _, frameno_str, addr, binary, offset = match.groups() - if frameno_str == '0': - # Assume that frame #0 is the first frame of new stack trace. - self.frame_no = 0 - original_binary = binary - if self.binary_name_filter: - binary = self.binary_name_filter(binary) - symbolized_line = self.symbolize_address(addr, binary, offset) - if not symbolized_line: - if original_binary != binary: - symbolized_line = self.symbolize_address(addr, binary, offset) - self.print_symbolized_lines(symbolized_line) - - -if __name__ == '__main__': - opts, args = getopt.getopt(sys.argv[1:], "d", ["demangle"]) - for o, a in opts: - if o in ("-d", "--demangle"): - demangle = True; - loop = SymbolizationLoop() - loop.process_stdin() diff --git a/chromium/tools/valgrind/browser_wrapper_win.py b/chromium/tools/valgrind/browser_wrapper_win.py deleted file mode 100644 index b855e80d6d9..00000000000 --- a/chromium/tools/valgrind/browser_wrapper_win.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import glob -import os -import re -import sys -import subprocess - -# TODO(timurrrr): we may use it on POSIX too to avoid code duplication once we -# support layout_tests, remove Dr. Memory specific code and verify it works -# on a "clean" Mac. - -testcase_name = None -for arg in sys.argv: - m = re.match("\-\-test\-name=(.*)", arg) - if m: - assert testcase_name is None - testcase_name = m.groups()[0] - -# arg #0 is the path to this python script -cmd_to_run = sys.argv[1:] - -# TODO(timurrrr): this is Dr. Memory-specific -# Usually, we pass "-logdir" "foo\bar\spam path" args to Dr. Memory. -# To group reports per UI test, we want to put the reports for each test into a -# separate directory. This code can be simplified when we have -# http://code.google.com/p/drmemory/issues/detail?id=684 fixed. -logdir_idx = cmd_to_run.index("-logdir") -old_logdir = cmd_to_run[logdir_idx + 1] - -wrapper_pid = str(os.getpid()) - -# On Windows, there is a chance of PID collision. We avoid it by appending the -# number of entries in the logdir at the end of wrapper_pid. -# This number is monotonic and we can't have two simultaneously running wrappers -# with the same PID. -wrapper_pid += "_%d" % len(glob.glob(old_logdir + "\\*")) - -cmd_to_run[logdir_idx + 1] += "\\testcase.%s.logs" % wrapper_pid -os.makedirs(cmd_to_run[logdir_idx + 1]) - -if testcase_name: - f = open(old_logdir + "\\testcase.%s.name" % wrapper_pid, "w") - print >>f, testcase_name - f.close() - -exit(subprocess.call(cmd_to_run)) diff --git a/chromium/tools/valgrind/chrome_tests.bat b/chromium/tools/valgrind/chrome_tests.bat deleted file mode 100755 index 138bec7e93d..00000000000 --- a/chromium/tools/valgrind/chrome_tests.bat +++ /dev/null @@ -1,70 +0,0 @@ -@echo off -:: Copyright (c) 2011 The Chromium Authors. All rights reserved. -:: Use of this source code is governed by a BSD-style license that can be -:: found in the LICENSE file. - -:: TODO(timurrrr): batch files 'export' all the variables to the parent shell -set THISDIR=%~dp0 -set TOOL_NAME="unknown" - -:: Get the tool name and put it into TOOL_NAME {{{1 -:: NB: SHIFT command doesn't modify %* -:PARSE_ARGS_LOOP - if %1 == () GOTO:TOOLNAME_NOT_FOUND - if %1 == --tool GOTO:TOOLNAME_FOUND - SHIFT - goto :PARSE_ARGS_LOOP - -:TOOLNAME_NOT_FOUND -echo "Please specify a tool (tsan or drmemory) by using --tool flag" -exit /B 1 - -:TOOLNAME_FOUND -SHIFT -set TOOL_NAME=%1 -:: }}} -if "%TOOL_NAME%" == "drmemory" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_light" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_full" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "drmemory_pattern" GOTO :SETUP_DRMEMORY -if "%TOOL_NAME%" == "tsan" GOTO :SETUP_TSAN -echo "Unknown tool: `%TOOL_NAME%`! Only tsan and drmemory are supported right now" -exit /B 1 - -:SETUP_DRMEMORY -if NOT "%DRMEMORY_COMMAND%"=="" GOTO :RUN_TESTS -:: Set up DRMEMORY_COMMAND to invoke Dr. Memory {{{1 -set DRMEMORY_PATH=%THISDIR%..\..\third_party\drmemory -set DRMEMORY_SFX=%DRMEMORY_PATH%\drmemory-windows-sfx.exe -if EXIST %DRMEMORY_SFX% GOTO DRMEMORY_BINARY_OK -echo "Can't find Dr. Memory executables." -echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory" -echo "for the instructions on how to get them." -exit /B 1 - -:DRMEMORY_BINARY_OK -%DRMEMORY_SFX% -o%DRMEMORY_PATH%\unpacked -y -set DRMEMORY_COMMAND=%DRMEMORY_PATH%\unpacked\bin\drmemory.exe -:: }}} -goto :RUN_TESTS - -:SETUP_TSAN -:: Set up PIN_COMMAND to invoke TSan {{{1 -set TSAN_PATH=%THISDIR%..\..\third_party\tsan -set TSAN_SFX=%TSAN_PATH%\tsan-x86-windows-sfx.exe -if EXIST %TSAN_SFX% GOTO TSAN_BINARY_OK -echo "Can't find ThreadSanitizer executables." -echo "See http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer/threadsanitizer-on-windows" -echo "for the instructions on how to get them." -exit /B 1 - -:TSAN_BINARY_OK -%TSAN_SFX% -o%TSAN_PATH%\unpacked -y -set PIN_COMMAND=%TSAN_PATH%\unpacked\tsan-x86-windows\tsan.bat -:: }}} -goto :RUN_TESTS - -:RUN_TESTS -set PYTHONPATH=%THISDIR%../python/google -set RUNNING_ON_VALGRIND=yes -python %THISDIR%/chrome_tests.py %* diff --git a/chromium/tools/valgrind/chrome_tests.py b/chromium/tools/valgrind/chrome_tests.py deleted file mode 100755 index d4aa919e598..00000000000 --- a/chromium/tools/valgrind/chrome_tests.py +++ /dev/null @@ -1,652 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -''' Runs various chrome tests through valgrind_test.py.''' - -import glob -import logging -import multiprocessing -import optparse -import os -import stat -import sys - -import logging_utils -import path_utils - -import common -import valgrind_test - -class TestNotFound(Exception): pass - -class MultipleGTestFiltersSpecified(Exception): pass - -class BuildDirNotFound(Exception): pass - -class BuildDirAmbiguous(Exception): pass - -class ChromeTests: - SLOW_TOOLS = ["memcheck", "tsan", "tsan_rv", "drmemory"] - LAYOUT_TESTS_DEFAULT_CHUNK_SIZE = 500 - - def __init__(self, options, args, test): - if ':' in test: - (self._test, self._gtest_filter) = test.split(':', 1) - else: - self._test = test - self._gtest_filter = options.gtest_filter - - if self._test not in self._test_list: - raise TestNotFound("Unknown test: %s" % test) - - if options.gtest_filter and options.gtest_filter != self._gtest_filter: - raise MultipleGTestFiltersSpecified("Can not specify both --gtest_filter " - "and --test %s" % test) - - self._options = options - self._args = args - - script_dir = path_utils.ScriptDir() - # Compute the top of the tree (the "source dir") from the script dir (where - # this script lives). We assume that the script dir is in tools/valgrind/ - # relative to the top of the tree. - self._source_dir = os.path.dirname(os.path.dirname(script_dir)) - # since this path is used for string matching, make sure it's always - # an absolute Unix-style path - self._source_dir = os.path.abspath(self._source_dir).replace('\\', '/') - valgrind_test_script = os.path.join(script_dir, "valgrind_test.py") - self._command_preamble = ["--source-dir=%s" % (self._source_dir)] - - if not self._options.build_dir: - dirs = [ - os.path.join(self._source_dir, "xcodebuild", "Debug"), - os.path.join(self._source_dir, "out", "Debug"), - os.path.join(self._source_dir, "build", "Debug"), - ] - build_dir = [d for d in dirs if os.path.isdir(d)] - if len(build_dir) > 1: - raise BuildDirAmbiguous("Found more than one suitable build dir:\n" - "%s\nPlease specify just one " - "using --build-dir" % ", ".join(build_dir)) - elif build_dir: - self._options.build_dir = build_dir[0] - else: - self._options.build_dir = None - - if self._options.build_dir: - build_dir = os.path.abspath(self._options.build_dir) - self._command_preamble += ["--build-dir=%s" % (self._options.build_dir)] - - def _EnsureBuildDirFound(self): - if not self._options.build_dir: - raise BuildDirNotFound("Oops, couldn't find a build dir, please " - "specify it manually using --build-dir") - - def _DefaultCommand(self, tool, exe=None, valgrind_test_args=None): - '''Generates the default command array that most tests will use.''' - if exe and common.IsWindows(): - exe += '.exe' - - cmd = list(self._command_preamble) - - # Find all suppressions matching the following pattern: - # tools/valgrind/TOOL/suppressions[_PLATFORM].txt - # and list them with --suppressions= prefix. - script_dir = path_utils.ScriptDir() - tool_name = tool.ToolName(); - suppression_file = os.path.join(script_dir, tool_name, "suppressions.txt") - if os.path.exists(suppression_file): - cmd.append("--suppressions=%s" % suppression_file) - # Platform-specific suppression - for platform in common.PlatformNames(): - platform_suppression_file = \ - os.path.join(script_dir, tool_name, 'suppressions_%s.txt' % platform) - if os.path.exists(platform_suppression_file): - cmd.append("--suppressions=%s" % platform_suppression_file) - - if self._options.valgrind_tool_flags: - cmd += self._options.valgrind_tool_flags.split(" ") - if self._options.keep_logs: - cmd += ["--keep_logs"] - if valgrind_test_args != None: - for arg in valgrind_test_args: - cmd.append(arg) - if exe: - self._EnsureBuildDirFound() - cmd.append(os.path.join(self._options.build_dir, exe)) - # Valgrind runs tests slowly, so slow tests hurt more; show elapased time - # so we can find the slowpokes. - cmd.append("--gtest_print_time") - # Built-in test launcher for gtest-based executables runs tests using - # multiple process by default. Force the single-process mode back. - cmd.append("--single-process-tests") - if self._options.gtest_repeat: - cmd.append("--gtest_repeat=%s" % self._options.gtest_repeat) - if self._options.gtest_shuffle: - cmd.append("--gtest_shuffle") - if self._options.brave_new_test_launcher: - cmd.append("--brave-new-test-launcher") - if self._options.test_launcher_bot_mode: - cmd.append("--test-launcher-bot-mode") - return cmd - - def Run(self): - ''' Runs the test specified by command-line argument --test ''' - logging.info("running test %s" % (self._test)) - return self._test_list[self._test](self) - - def _AppendGtestFilter(self, tool, name, cmd): - '''Append an appropriate --gtest_filter flag to the googletest binary - invocation. - If the user passed his own filter mentioning only one test, just use it. - Othewise, filter out tests listed in the appropriate gtest_exclude files. - ''' - if (self._gtest_filter and - ":" not in self._gtest_filter and - "?" not in self._gtest_filter and - "*" not in self._gtest_filter): - cmd.append("--gtest_filter=%s" % self._gtest_filter) - return - - filters = [] - gtest_files_dir = os.path.join(path_utils.ScriptDir(), "gtest_exclude") - - gtest_filter_files = [ - os.path.join(gtest_files_dir, name + ".gtest-%s.txt" % tool.ToolName())] - # Use ".gtest.txt" files only for slow tools, as they now contain - # Valgrind- and Dr.Memory-specific filters. - # TODO(glider): rename the files to ".gtest_slow.txt" - if tool.ToolName() in ChromeTests.SLOW_TOOLS: - gtest_filter_files += [os.path.join(gtest_files_dir, name + ".gtest.txt")] - for platform_suffix in common.PlatformNames(): - gtest_filter_files += [ - os.path.join(gtest_files_dir, name + ".gtest_%s.txt" % platform_suffix), - os.path.join(gtest_files_dir, name + ".gtest-%s_%s.txt" % \ - (tool.ToolName(), platform_suffix))] - logging.info("Reading gtest exclude filter files:") - for filename in gtest_filter_files: - # strip the leading absolute path (may be very long on the bot) - # and the following / or \. - readable_filename = filename.replace("\\", "/") # '\' on Windows - readable_filename = readable_filename.replace(self._source_dir, "")[1:] - if not os.path.exists(filename): - logging.info(" \"%s\" - not found" % readable_filename) - continue - logging.info(" \"%s\" - OK" % readable_filename) - f = open(filename, 'r') - for line in f.readlines(): - if line.startswith("#") or line.startswith("//") or line.isspace(): - continue - line = line.rstrip() - test_prefixes = ["FLAKY", "FAILS"] - for p in test_prefixes: - # Strip prefixes from the test names. - line = line.replace(".%s_" % p, ".") - # Exclude the original test name. - filters.append(line) - if line[-2:] != ".*": - # List all possible prefixes if line doesn't end with ".*". - for p in test_prefixes: - filters.append(line.replace(".", ".%s_" % p)) - # Get rid of duplicates. - filters = set(filters) - gtest_filter = self._gtest_filter - if len(filters): - if gtest_filter: - gtest_filter += ":" - if gtest_filter.find("-") < 0: - gtest_filter += "-" - else: - gtest_filter = "-" - gtest_filter += ":".join(filters) - if gtest_filter: - cmd.append("--gtest_filter=%s" % gtest_filter) - - @staticmethod - def ShowTests(): - test_to_names = {} - for name, test_function in ChromeTests._test_list.iteritems(): - test_to_names.setdefault(test_function, []).append(name) - - name_to_aliases = {} - for names in test_to_names.itervalues(): - names.sort(key=lambda name: len(name)) - name_to_aliases[names[0]] = names[1:] - - print - print "Available tests:" - print "----------------" - for name, aliases in sorted(name_to_aliases.iteritems()): - if aliases: - print " {} (aka {})".format(name, ', '.join(aliases)) - else: - print " {}".format(name) - - def SetupLdPath(self, requires_build_dir): - if requires_build_dir: - self._EnsureBuildDirFound() - elif not self._options.build_dir: - return - - # Append build_dir to LD_LIBRARY_PATH so external libraries can be loaded. - if (os.getenv("LD_LIBRARY_PATH")): - os.putenv("LD_LIBRARY_PATH", "%s:%s" % (os.getenv("LD_LIBRARY_PATH"), - self._options.build_dir)) - else: - os.putenv("LD_LIBRARY_PATH", self._options.build_dir) - - def SimpleTest(self, module, name, valgrind_test_args=None, cmd_args=None): - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool, name, valgrind_test_args) - self._AppendGtestFilter(tool, name, cmd) - cmd.extend(['--test-tiny-timeout=1000']) - if cmd_args: - cmd.extend(cmd_args) - - self.SetupLdPath(True) - return tool.Run(cmd, module) - - def RunCmdLine(self): - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool, None, self._args) - self.SetupLdPath(False) - return tool.Run(cmd, None) - - def TestAppList(self): - return self.SimpleTest("app_list", "app_list_unittests") - - def TestAsh(self): - return self.SimpleTest("ash", "ash_unittests") - - def TestAura(self): - return self.SimpleTest("aura", "aura_unittests") - - def TestBase(self): - return self.SimpleTest("base", "base_unittests") - - def TestChromeOS(self): - return self.SimpleTest("chromeos", "chromeos_unittests") - - def TestComponents(self): - return self.SimpleTest("components", "components_unittests") - - def TestCompositor(self): - return self.SimpleTest("compositor", "compositor_unittests") - - def TestContent(self): - return self.SimpleTest("content", "content_unittests") - - def TestContentBrowser(self): - return self.SimpleTest("content", "content_browsertests") - - def TestCourgette(self): - return self.SimpleTest("courgette", "courgette_unittests") - - def TestCrypto(self): - return self.SimpleTest("crypto", "crypto_unittests") - - def TestDevice(self): - return self.SimpleTest("device", "device_unittests") - - def TestEvents(self): - return self.SimpleTest("events", "events_unittests") - - def TestFFmpeg(self): - return self.SimpleTest("chrome", "ffmpeg_unittests") - - def TestFFmpegRegressions(self): - return self.SimpleTest("chrome", "ffmpeg_regression_tests") - - def TestGPU(self): - return self.SimpleTest("gpu", "gpu_unittests") - - def TestIpc(self): - return self.SimpleTest("ipc", "ipc_tests", - valgrind_test_args=["--trace_children"]) - - def TestJingle(self): - return self.SimpleTest("chrome", "jingle_unittests") - - def TestMedia(self): - return self.SimpleTest("chrome", "media_unittests") - - def TestMessageCenter(self): - return self.SimpleTest("message_center", "message_center_unittests") - - def TestNet(self): - return self.SimpleTest("net", "net_unittests") - - def TestNetPerf(self): - return self.SimpleTest("net", "net_perftests") - - def TestPPAPI(self): - return self.SimpleTest("chrome", "ppapi_unittests") - - def TestPrinting(self): - return self.SimpleTest("chrome", "printing_unittests") - - def TestRemoting(self): - return self.SimpleTest("chrome", "remoting_unittests", - cmd_args=[ - "--ui-test-action-timeout=60000", - "--ui-test-action-max-timeout=150000"]) - - def TestSql(self): - return self.SimpleTest("chrome", "sql_unittests") - - def TestSync(self): - return self.SimpleTest("chrome", "sync_unit_tests") - - def TestLinuxSandbox(self): - return self.SimpleTest("sandbox", "sandbox_linux_unittests") - - def TestUnit(self): - # http://crbug.com/51716 - # Disabling all unit tests - # Problems reappeared after r119922 - if common.IsMac() and (self._options.valgrind_tool == "memcheck"): - logging.warning("unit_tests are disabled for memcheck on MacOS.") - return 0; - return self.SimpleTest("chrome", "unit_tests") - - def TestUIUnit(self): - return self.SimpleTest("chrome", "ui_unittests") - - def TestURL(self): - return self.SimpleTest("chrome", "url_unittests") - - def TestViews(self): - return self.SimpleTest("views", "views_unittests") - - # Valgrind timeouts are in seconds. - UI_VALGRIND_ARGS = ["--timeout=14400", "--trace_children", "--indirect"] - # UI test timeouts are in milliseconds. - UI_TEST_ARGS = ["--ui-test-action-timeout=60000", - "--ui-test-action-max-timeout=150000", - "--no-sandbox"] - - # TODO(thestig) fine-tune these values. - # Valgrind timeouts are in seconds. - BROWSER_VALGRIND_ARGS = ["--timeout=50000", "--trace_children", "--indirect"] - # Browser test timeouts are in milliseconds. - BROWSER_TEST_ARGS = ["--ui-test-action-timeout=400000", - "--ui-test-action-max-timeout=800000", - "--no-sandbox"] - - def TestAutomatedUI(self): - return self.SimpleTest("chrome", "automated_ui_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=self.UI_TEST_ARGS) - - def TestBrowser(self): - return self.SimpleTest("chrome", "browser_tests", - valgrind_test_args=self.BROWSER_VALGRIND_ARGS, - cmd_args=self.BROWSER_TEST_ARGS) - - def TestInteractiveUI(self): - return self.SimpleTest("chrome", "interactive_ui_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=self.UI_TEST_ARGS) - - def TestReliability(self): - script_dir = path_utils.ScriptDir() - url_list_file = os.path.join(script_dir, "reliability", "url_list.txt") - return self.SimpleTest("chrome", "reliability_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=(self.UI_TEST_ARGS + - ["--list=%s" % url_list_file])) - - def TestSafeBrowsing(self): - return self.SimpleTest("chrome", "safe_browsing_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=(["--ui-test-action-max-timeout=450000"])) - - def TestSyncIntegration(self): - return self.SimpleTest("chrome", "sync_integration_tests", - valgrind_test_args=self.UI_VALGRIND_ARGS, - cmd_args=(["--ui-test-action-max-timeout=450000"])) - - def TestLayoutChunk(self, chunk_num, chunk_size): - # Run tests [chunk_num*chunk_size .. (chunk_num+1)*chunk_size) from the - # list of tests. Wrap around to beginning of list at end. - # If chunk_size is zero, run all tests in the list once. - # If a text file is given as argument, it is used as the list of tests. - # - # Build the ginormous commandline in 'cmd'. - # It's going to be roughly - # python valgrind_test.py ... python run_webkit_tests.py ... - # but we'll use the --indirect flag to valgrind_test.py - # to avoid valgrinding python. - # Start by building the valgrind_test.py commandline. - tool = valgrind_test.CreateTool(self._options.valgrind_tool) - cmd = self._DefaultCommand(tool) - cmd.append("--trace_children") - cmd.append("--indirect_webkit_layout") - cmd.append("--ignore_exit_code") - # Now build script_cmd, the run_webkits_tests.py commandline - # Store each chunk in its own directory so that we can find the data later - chunk_dir = os.path.join("layout", "chunk_%05d" % chunk_num) - out_dir = os.path.join(path_utils.ScriptDir(), "latest") - out_dir = os.path.join(out_dir, chunk_dir) - if os.path.exists(out_dir): - old_files = glob.glob(os.path.join(out_dir, "*.txt")) - for f in old_files: - os.remove(f) - else: - os.makedirs(out_dir) - script = os.path.join(self._source_dir, "webkit", "tools", "layout_tests", - "run_webkit_tests.py") - # http://crbug.com/260627: After the switch to content_shell from DRT, each - # test now brings up 3 processes. Under Valgrind, they become memory bound - # and can eventually OOM if we don't reduce the total count. - jobs = max(1, int(multiprocessing.cpu_count() * 0.4)) - script_cmd = ["python", script, "-v", - "--run-singly", # run a separate DumpRenderTree for each test - "--fully-parallel", - "--child-processes=%d" % jobs, - "--time-out-ms=200000", - "--no-retry-failures", # retrying takes too much time - # http://crbug.com/176908: Don't launch a browser when done. - "--no-show-results", - "--nocheck-sys-deps"] - # Pass build mode to run_webkit_tests.py. We aren't passed it directly, - # so parse it out of build_dir. run_webkit_tests.py can only handle - # the two values "Release" and "Debug". - # TODO(Hercules): unify how all our scripts pass around build mode - # (--mode / --target / --build-dir / --debug) - if self._options.build_dir: - build_root, mode = os.path.split(self._options.build_dir) - script_cmd.extend(["--build-directory", build_root, "--target", mode]) - if (chunk_size > 0): - script_cmd.append("--run-chunk=%d:%d" % (chunk_num, chunk_size)) - if len(self._args): - # if the arg is a txt file, then treat it as a list of tests - if os.path.isfile(self._args[0]) and self._args[0][-4:] == ".txt": - script_cmd.append("--test-list=%s" % self._args[0]) - else: - script_cmd.extend(self._args) - self._AppendGtestFilter(tool, "layout", script_cmd) - # Now run script_cmd with the wrapper in cmd - cmd.extend(["--"]) - cmd.extend(script_cmd) - - # Layout tests often times fail quickly, but the buildbot remains green. - # Detect this situation when running with the default chunk size. - if chunk_size == self.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE: - min_runtime_in_seconds=120 - else: - min_runtime_in_seconds=0 - ret = tool.Run(cmd, "layout", min_runtime_in_seconds=min_runtime_in_seconds) - return ret - - - def TestLayout(self): - # A "chunk file" is maintained in the local directory so that each test - # runs a slice of the layout tests of size chunk_size that increments with - # each run. Since tests can be added and removed from the layout tests at - # any time, this is not going to give exact coverage, but it will allow us - # to continuously run small slices of the layout tests under valgrind rather - # than having to run all of them in one shot. - chunk_size = self._options.num_tests - if (chunk_size == 0): - return self.TestLayoutChunk(0, 0) - chunk_num = 0 - chunk_file = os.path.join("valgrind_layout_chunk.txt") - logging.info("Reading state from " + chunk_file) - try: - f = open(chunk_file) - if f: - str = f.read() - if len(str): - chunk_num = int(str) - # This should be enough so that we have a couple of complete runs - # of test data stored in the archive (although note that when we loop - # that we almost guaranteed won't be at the end of the test list) - if chunk_num > 10000: - chunk_num = 0 - f.close() - except IOError, (errno, strerror): - logging.error("error reading from file %s (%d, %s)" % (chunk_file, - errno, strerror)) - # Save the new chunk size before running the tests. Otherwise if a - # particular chunk hangs the bot, the chunk number will never get - # incremented and the bot will be wedged. - logging.info("Saving state to " + chunk_file) - try: - f = open(chunk_file, "w") - chunk_num += 1 - f.write("%d" % chunk_num) - f.close() - except IOError, (errno, strerror): - logging.error("error writing to file %s (%d, %s)" % (chunk_file, errno, - strerror)) - # Since we're running small chunks of the layout tests, it's important to - # mark the ones that have errors in them. These won't be visible in the - # summary list for long, but will be useful for someone reviewing this bot. - return self.TestLayoutChunk(chunk_num, chunk_size) - - # The known list of tests. - # Recognise the original abbreviations as well as full executable names. - _test_list = { - "cmdline" : RunCmdLine, - "app_list": TestAppList, "app_list_unittests": TestAppList, - "ash": TestAsh, "ash_unittests": TestAsh, - "aura": TestAura, "aura_unittests": TestAura, - "automated_ui" : TestAutomatedUI, - "base": TestBase, "base_unittests": TestBase, - "browser": TestBrowser, "browser_tests": TestBrowser, - "chromeos": TestChromeOS, "chromeos_unittests": TestChromeOS, - "components": TestComponents,"components_unittests": TestComponents, - "compositor": TestCompositor,"compositor_unittests": TestCompositor, - "content": TestContent, "content_unittests": TestContent, - "content_browsertests": TestContentBrowser, - "courgette": TestCourgette, "courgette_unittests": TestCourgette, - "crypto": TestCrypto, "crypto_unittests": TestCrypto, - "device": TestDevice, "device_unittests": TestDevice, - "events": TestEvents, "events_unittests": TestEvents, - "ffmpeg": TestFFmpeg, "ffmpeg_unittests": TestFFmpeg, - "ffmpeg_regression_tests": TestFFmpegRegressions, - "gpu": TestGPU, "gpu_unittests": TestGPU, - "ipc": TestIpc, "ipc_tests": TestIpc, - "interactive_ui": TestInteractiveUI, - "jingle": TestJingle, "jingle_unittests": TestJingle, - "layout": TestLayout, "layout_tests": TestLayout, - "webkit": TestLayout, - "media": TestMedia, "media_unittests": TestMedia, - "message_center": TestMessageCenter, - "message_center_unittests" : TestMessageCenter, - "net": TestNet, "net_unittests": TestNet, - "net_perf": TestNetPerf, "net_perftests": TestNetPerf, - "ppapi": TestPPAPI, "ppapi_unittests": TestPPAPI, - "printing": TestPrinting, "printing_unittests": TestPrinting, - "reliability": TestReliability, "reliability_tests": TestReliability, - "remoting": TestRemoting, "remoting_unittests": TestRemoting, - "safe_browsing": TestSafeBrowsing, "safe_browsing_tests": TestSafeBrowsing, - "sandbox": TestLinuxSandbox, "sandbox_linux_unittests": TestLinuxSandbox, - "sql": TestSql, "sql_unittests": TestSql, - "sync": TestSync, "sync_unit_tests": TestSync, - "sync_integration_tests": TestSyncIntegration, - "sync_integration": TestSyncIntegration, - "ui_unit": TestUIUnit, "ui_unittests": TestUIUnit, - "unit": TestUnit, "unit_tests": TestUnit, - "url": TestURL, "url_unittests": TestURL, - "views": TestViews, "views_unittests": TestViews, - } - - -def _main(): - parser = optparse.OptionParser("usage: %prog -b -t " - "[-t ...]") - - parser.add_option("--help-tests", dest="help_tests", action="store_true", - default=False, help="List all available tests") - parser.add_option("-b", "--build-dir", - help="the location of the compiler output") - parser.add_option("--target", help="Debug or Release") - parser.add_option("-t", "--test", action="append", default=[], - help="which test to run, supports test:gtest_filter format " - "as well.") - parser.add_option("--baseline", action="store_true", default=False, - help="generate baseline data instead of validating") - parser.add_option("--gtest_filter", - help="additional arguments to --gtest_filter") - parser.add_option("--gtest_repeat", help="argument for --gtest_repeat") - parser.add_option("--gtest_shuffle", action="store_true", default=False, - help="Randomize tests' orders on every iteration.") - parser.add_option("-v", "--verbose", action="store_true", default=False, - help="verbose output - enable debug log messages") - parser.add_option("--tool", dest="valgrind_tool", default="memcheck", - help="specify a valgrind tool to run the tests under") - parser.add_option("--tool_flags", dest="valgrind_tool_flags", default="", - help="specify custom flags for the selected valgrind tool") - parser.add_option("--keep_logs", action="store_true", default=False, - help="store memory tool logs in the .logs directory " - "instead of /tmp.\nThis can be useful for tool " - "developers/maintainers.\nPlease note that the " - ".logs directory will be clobbered on tool startup.") - parser.add_option("-n", "--num_tests", type="int", - default=ChromeTests.LAYOUT_TESTS_DEFAULT_CHUNK_SIZE, - help="for layout tests: # of subtests per run. 0 for all.") - # TODO(thestig) Remove this if we can. - parser.add_option("--gtest_color", dest="gtest_color", default="no", - help="dummy compatibility flag for sharding_supervisor.") - parser.add_option("--brave-new-test-launcher", action="store_true", - help="run the tests with --brave-new-test-launcher") - parser.add_option("--test-launcher-bot-mode", action="store_true", - help="run the tests with --test-launcher-bot-mode") - - options, args = parser.parse_args() - - # Bake target into build_dir. - if options.target and options.build_dir: - assert (options.target != - os.path.basename(os.path.dirname(options.build_dir))) - options.build_dir = os.path.join(os.path.abspath(options.build_dir), - options.target) - - if options.verbose: - logging_utils.config_root(logging.DEBUG) - else: - logging_utils.config_root() - - if options.help_tests: - ChromeTests.ShowTests() - return 0 - - if not options.test: - parser.error("--test not specified") - - if len(options.test) != 1 and options.gtest_filter: - parser.error("--gtest_filter and multiple tests don't make sense together") - - for t in options.test: - tests = ChromeTests(options, args, t) - ret = tests.Run() - if ret: return ret - return 0 - - -if __name__ == "__main__": - sys.exit(_main()) diff --git a/chromium/tools/valgrind/chrome_tests.sh b/chromium/tools/valgrind/chrome_tests.sh deleted file mode 100755 index df5e8e745f2..00000000000 --- a/chromium/tools/valgrind/chrome_tests.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Set up some paths and re-direct the arguments to chrome_tests.py - -export THISDIR=`dirname $0` -ARGV_COPY="$@" - -# We need to set CHROME_VALGRIND iff using Memcheck or TSan-Valgrind: -# tools/valgrind/chrome_tests.sh --tool memcheck -# or -# tools/valgrind/chrome_tests.sh --tool=memcheck -# (same for "--tool=tsan") -tool="memcheck" # Default to memcheck. -while (( "$#" )) -do - if [[ "$1" == "--tool" ]] - then - tool="$2" - shift - elif [[ "$1" =~ --tool=(.*) ]] - then - tool="${BASH_REMATCH[1]}" - fi - shift -done - -NEEDS_VALGRIND=0 -NEEDS_DRMEMORY=0 - -case "$tool" in - "memcheck") - NEEDS_VALGRIND=1 - ;; - "tsan" | "tsan_rv") - if [ "`uname -s`" == CYGWIN* ] - then - NEEDS_PIN=1 - else - NEEDS_VALGRIND=1 - fi - ;; - "drmemory" | "drmemory_light" | "drmemory_full" | "drmemory_pattern") - NEEDS_DRMEMORY=1 - ;; -esac - -if [ "$NEEDS_VALGRIND" == "1" ] -then - export CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` - if [ "$CHROME_VALGRIND" = "" ] - then - # locate_valgrind.sh failed - exit 1 - fi - echo "Using valgrind binaries from ${CHROME_VALGRIND}" - - PATH="${CHROME_VALGRIND}/bin:$PATH" - # We need to set these variables to override default lib paths hard-coded into - # Valgrind binary. - export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind" - export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" - - # Clean up some /tmp directories that might be stale due to interrupted - # chrome_tests.py execution. - # FYI: - # -mtime +1 <- only print files modified more than 24h ago, - # -print0/-0 are needed to handle possible newlines in the filenames. - echo "Cleanup /tmp from Valgrind stuff" - find /tmp -maxdepth 1 \(\ - -name "vgdb-pipe-*" -or -name "vg_logs_*" -or -name "valgrind.*" \ - \) -mtime +1 -print0 | xargs -0 rm -rf -fi - -if [ "$NEEDS_DRMEMORY" == "1" ] -then - if [ -z "$DRMEMORY_COMMAND" ] - then - DRMEMORY_PATH="$THISDIR/../../third_party/drmemory" - DRMEMORY_SFX="$DRMEMORY_PATH/drmemory-windows-sfx.exe" - if [ ! -f "$DRMEMORY_SFX" ] - then - echo "Can't find Dr. Memory executables." - echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory" - echo "for the instructions on how to get them." - exit 1 - fi - - chmod +x "$DRMEMORY_SFX" # Cygwin won't run it without +x. - "$DRMEMORY_SFX" -o"$DRMEMORY_PATH/unpacked" -y - export DRMEMORY_COMMAND="$DRMEMORY_PATH/unpacked/bin/drmemory.exe" - fi -fi - -if [ "$NEEDS_PIN" == "1" ] -then - if [ -z "$PIN_COMMAND" ] - then - # Set up PIN_COMMAND to invoke TSan. - TSAN_PATH="$THISDIR/../../third_party/tsan" - TSAN_SFX="$TSAN_PATH/tsan-x86-windows-sfx.exe" - echo "$TSAN_SFX" - if [ ! -f $TSAN_SFX ] - then - echo "Can't find ThreadSanitizer executables." - echo "See http://www.chromium.org/developers/how-tos/using-valgrind/threadsanitizer/threadsanitizer-on-windows" - echo "for the instructions on how to get them." - exit 1 - fi - - chmod +x "$TSAN_SFX" # Cygwin won't run it without +x. - "$TSAN_SFX" -o"$TSAN_PATH"/unpacked -y - export PIN_COMMAND="$TSAN_PATH/unpacked/tsan-x86-windows/tsan.bat" - fi -fi - - -PYTHONPATH=$THISDIR/../python/google python \ - "$THISDIR/chrome_tests.py" $ARGV_COPY diff --git a/chromium/tools/valgrind/common.py b/chromium/tools/valgrind/common.py deleted file mode 100644 index 7e163e3c602..00000000000 --- a/chromium/tools/valgrind/common.py +++ /dev/null @@ -1,252 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import logging -import platform -import os -import signal -import subprocess -import sys -import time - - -class NotImplementedError(Exception): - pass - - -class TimeoutError(Exception): - pass - - -def RunSubprocessInBackground(proc): - """Runs a subprocess in the background. Returns a handle to the process.""" - logging.info("running %s in the background" % " ".join(proc)) - return subprocess.Popen(proc) - - -def RunSubprocess(proc, timeout=0): - """ Runs a subprocess, until it finishes or |timeout| is exceeded and the - process is killed with taskkill. A |timeout| <= 0 means no timeout. - - Args: - proc: list of process components (exe + args) - timeout: how long to wait before killing, <= 0 means wait forever - """ - - logging.info("running %s, timeout %d sec" % (" ".join(proc), timeout)) - sys.stdout.flush() - sys.stderr.flush() - - # Manually read and print out stdout and stderr. - # By default, the subprocess is supposed to inherit these from its parent, - # however when run under buildbot, it seems unable to read data from a - # grandchild process, so we have to read the child and print the data as if - # it came from us for buildbot to read it. We're not sure why this is - # necessary. - # TODO(erikkay): should we buffer stderr and stdout separately? - p = subprocess.Popen(proc, universal_newlines=True, - bufsize=0, # unbuffered - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - logging.info("started subprocess") - - did_timeout = False - if timeout > 0: - wait_until = time.time() + timeout - while p.poll() is None and not did_timeout: - # Have to use readline rather than readlines() or "for line in p.stdout:", - # otherwise we get buffered even with bufsize=0. - line = p.stdout.readline() - while line and not did_timeout: - sys.stdout.write(line) - sys.stdout.flush() - line = p.stdout.readline() - if timeout > 0: - did_timeout = time.time() > wait_until - - if did_timeout: - logging.info("process timed out") - else: - logging.info("process ended, did not time out") - - if did_timeout: - if IsWindows(): - subprocess.call(["taskkill", "/T", "/F", "/PID", str(p.pid)]) - else: - # Does this kill all children, too? - os.kill(p.pid, signal.SIGINT) - logging.error("KILLED %d" % p.pid) - # Give the process a chance to actually die before continuing - # so that cleanup can happen safely. - time.sleep(1.0) - logging.error("TIMEOUT waiting for %s" % proc[0]) - raise TimeoutError(proc[0]) - else: - for line in p.stdout: - sys.stdout.write(line) - if not IsMac(): # stdout flush fails on Mac - logging.info("flushing stdout") - sys.stdout.flush() - - logging.info("collecting result code") - result = p.poll() - if result: - logging.error("%s exited with non-zero result code %d" % (proc[0], result)) - return result - - -def IsLinux(): - return sys.platform.startswith('linux') - - -def IsMac(): - return sys.platform.startswith('darwin') - - -def IsWindows(): - return sys.platform == 'cygwin' or sys.platform.startswith('win') - - -def WindowsVersionName(): - """Returns the name of the Windows version if it is known, or None. - - Possible return values are: xp, vista, 7, 8, or None - """ - if sys.platform == 'cygwin': - # Windows version number is hiding in system name. Looks like: - # CYGWIN_NT-6.1-WOW64 - try: - version_str = platform.uname()[0].split('-')[1] - except: - return None - elif sys.platform.startswith('win'): - # Normal Windows version string. Mine: 6.1.7601 - version_str = platform.version() - else: - return None - - parts = version_str.split('.') - try: - major = int(parts[0]) - minor = int(parts[1]) - except: - return None # Can't parse, unknown version. - - if major == 5: - return 'xp' - elif major == 6 and minor == 0: - return 'vista' - elif major == 6 and minor == 1: - return '7' - elif major == 6 and minor == 2: - return '8' # Future proof. ;) - return None - - -def PlatformNames(): - """Return an array of string to be used in paths for the platform - (e.g. suppressions, gtest filters, ignore files etc.) - The first element of the array describes the 'main' platform - """ - if IsLinux(): - return ['linux'] - if IsMac(): - return ['mac'] - if IsWindows(): - names = ['win32'] - version_name = WindowsVersionName() - if version_name is not None: - names.append('win-%s' % version_name) - return names - raise NotImplementedError('Unknown platform "%s".' % sys.platform) - - -def PutEnvAndLog(env_name, env_value): - os.putenv(env_name, env_value) - logging.info('export %s=%s', env_name, env_value) - -def BoringCallers(mangled, use_re_wildcards): - """Return a list of 'boring' function names (optinally mangled) - with */? wildcards (optionally .*/.). - Boring = we drop off the bottom of stack traces below such functions. - """ - - need_mangling = [ - # Don't show our testing framework: - ("testing::Test::Run", "_ZN7testing4Test3RunEv"), - ("testing::TestInfo::Run", "_ZN7testing8TestInfo3RunEv"), - ("testing::internal::Handle*ExceptionsInMethodIfSupported*", - "_ZN7testing8internal3?Handle*ExceptionsInMethodIfSupported*"), - - # Depend on scheduling: - ("MessageLoop::Run", "_ZN11MessageLoop3RunEv"), - ("MessageLoop::RunTask", "_ZN11MessageLoop7RunTask*"), - ("RunnableMethod*", "_ZN14RunnableMethod*"), - ("DispatchToMethod*", "_Z*16DispatchToMethod*"), - ("base::internal::Invoker*::DoInvoke*", - "_ZN4base8internal8Invoker*DoInvoke*"), # Invoker{1,2,3} - ("base::internal::RunnableAdapter*::Run*", - "_ZN4base8internal15RunnableAdapter*Run*"), - ] - - ret = [] - for pair in need_mangling: - ret.append(pair[1 if mangled else 0]) - - ret += [ - # Also don't show the internals of libc/pthread. - "start_thread", - "main", - "BaseThreadInitThunk", - ] - - if use_re_wildcards: - for i in range(0, len(ret)): - ret[i] = ret[i].replace('*', '.*').replace('?', '.') - - return ret - -def NormalizeWindowsPath(path): - """If we're using Cygwin Python, turn the path into a Windows path. - - Don't turn forward slashes into backslashes for easier copy-pasting and - escaping. - - TODO(rnk): If we ever want to cut out the subprocess invocation, we can use - _winreg to get the root Cygwin directory from the registry key: - HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\setup\rootdir. - """ - if sys.platform.startswith("cygwin"): - p = subprocess.Popen(["cygpath", "-m", path], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - (out, err) = p.communicate() - if err: - logging.warning("WARNING: cygpath error: %s", err) - return out.strip() - else: - return path - -############################ -# Common output format code - -def PrintUsedSuppressionsList(suppcounts): - """ Prints out the list of used suppressions in a format common to all the - memory tools. If the list is empty, prints nothing and returns False, - otherwise True. - - suppcounts: a dictionary of used suppression counts, - Key -> name, Value -> count. - """ - if not suppcounts: - return False - - print "-----------------------------------------------------" - print "Suppressions used:" - print " count name" - for (name, count) in sorted(suppcounts.items(), key=lambda (k,v): (v,k)): - print "%7d %s" % (count, name) - print "-----------------------------------------------------" - sys.stdout.flush() - return True diff --git a/chromium/tools/valgrind/drmemory.bat b/chromium/tools/valgrind/drmemory.bat deleted file mode 100755 index 46d5a4f09bb..00000000000 --- a/chromium/tools/valgrind/drmemory.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off -:: Copyright (c) 2011 The Chromium Authors. All rights reserved. -:: Use of this source code is governed by a BSD-style license that can be -:: found in the LICENSE file. -%~dp0\chrome_tests.bat -t cmdline --tool drmemory %* diff --git a/chromium/tools/valgrind/drmemory/OWNERS b/chromium/tools/valgrind/drmemory/OWNERS deleted file mode 100644 index 72e8ffc0db8..00000000000 --- a/chromium/tools/valgrind/drmemory/OWNERS +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/chromium/tools/valgrind/drmemory/PRESUBMIT.py b/chromium/tools/valgrind/drmemory/PRESUBMIT.py deleted file mode 100644 index 11c71478b78..00000000000 --- a/chromium/tools/valgrind/drmemory/PRESUBMIT.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -""" -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -for more details on the presubmit API built into gcl. -""" - - -def CheckChange(input_api, output_api): - """Checks the DrMemory suppression files for bad suppressions.""" - - # TODO(timurrrr): find out how to do relative imports - # and remove this ugly hack. Also, the CheckChange function won't be needed. - tools_vg_path = input_api.os_path.join(input_api.PresubmitLocalPath(), '..') - import sys - old_path = sys.path - try: - sys.path = sys.path + [tools_vg_path] - import suppressions - return suppressions.PresubmitCheck(input_api, output_api) - finally: - sys.path = old_path - - -def CheckChangeOnUpload(input_api, output_api): - return CheckChange(input_api, output_api) - - -def CheckChangeOnCommit(input_api, output_api): - return CheckChange(input_api, output_api) - - -def GetPreferredTrySlaves(): - return ['win_drmemory'] diff --git a/chromium/tools/valgrind/drmemory/suppressions.txt b/chromium/tools/valgrind/drmemory/suppressions.txt deleted file mode 100644 index 7678adb3b2b..00000000000 --- a/chromium/tools/valgrind/drmemory/suppressions.txt +++ /dev/null @@ -1,430 +0,0 @@ -# This file contains suppressions for the Dr.Memory tool, see -# http://dev.chromium.org/developers/how-tos/using-drmemory -# -# This file contains suppressions for the DrMemory reports happening -# in the 'light' mode (a.k.a. drmemory_light) as well as in the 'full' mode. -# Please use suppressions_full.txt for all the reports that can happen only -# in the full mode (drmemory_full), - -############################ -# Known reports on the third party we have no control over. - -# Reports from Sophos antivirus -UNADDRESSABLE ACCESS -name=Sophos UNADDR -... -sophos*.dll!* - -UNINITIALIZED READ -name=Sophos UNINIT -... -sophos*.dll!* - -LEAK -name=Sophos LEAK -... -sophos*.dll!* - -# Reports from Micorosft RDP ActiveX control (mstscax.dll) - -GDI USAGE ERROR -name=crbug.com/177832: mstscax.dll causes "GDI USAGE ERROR" errors. -... -mstscax.dll!* - -UNADDRESSABLE ACCESS -name=crbug.com/177832: mstscax.dll causes "UNADDRESSABLE ACCESS" errors. -... -mstscax.dll!* - -############################ -# Suppress some false reports due to bugs in Dr.Memory like wrong analysis -# assumptions or unhandled syscalls - -# Please note: the following suppressions were written in the abscense of -# private symbols so may need to be updated when we switch to auto-loading PDBs - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=12 UNADDR -... -SHELL32.dll!SHFileOperation* - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=40 UNADDR -... -WINSPOOL.DRV!* - -INVALID HEAP ARGUMENT -name=http://code.google.com/p/drmemory/issues/detail?id=40 INVALID HEAP -... -WINSPOOL.DRV!* - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=59 -... -*!SetEnvironmentVariable* - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=68 (UNADDR 1) -... -MSWSOCK.dll!WSPStartup - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=68 (UNADDR 2) -... -ntdll.dll!RtlValidateUnicodeString - -############################ -# TODO(timurrrr): investigate these -UNADDRESSABLE ACCESS -name=TODO SHParseDisplayName -... -*!SHParseDisplayName - -UNADDRESSABLE ACCESS -name=TODO GetCanonicalPathInfo -... -*!GetCanonicalPathInfo* - -UNADDRESSABLE ACCESS -name=TODO CreateDC -... -GDI32.dll!CreateDC* - -# This one looks interesting -INVALID HEAP ARGUMENT -name=TODO ExitProcess -... -KERNEL32.dll!ExitProcess - -INVALID HEAP ARGUMENT -name=http://crbug.com/103365 (a) -ppapi_tests.dll!* -... -ppapi_tests.dll!* -*!base::internal::RunnableAdapter<*>::Run - -INVALID HEAP ARGUMENT -name=http://crbug.com/103365 (b) -ppapi_tests.dll!* -... -ppapi_tests.dll!* -*!PP_RunCompletionCallback -... -*!base::internal::RunnableAdapter<*>::Run - -INVALID HEAP ARGUMENT -name=http://crbug.com/107567 intentional mismatch in _DebugHeapDelete, no frame -*!std::numpunct<*>::_Tidy -*!std::numpunct<*>::~numpunct<*> - -# TODO(rbultje): Investigate if code fix is required instead. -WARNING -name=http://crbug.com/223255 - prefetches in vp8 -instruction=prefetch* -ffmpegsumo.dll!ff_prefetch_mmxext -ffmpegsumo.dll!vp8_decode_mb_row_no_filter - -############################ -# Intentional errors in Chromium tests (ToolsSanityTests) -LEAK -name=sanity test 01 (memory leak) -base_unittests.exe!operator new -base_unittests.exe!operator new[] -base_unittests.exe!base::ToolsSanityTest_MemoryLeak_Test::TestBody - -# "..." is needed due to http://code.google.com/p/drmemory/issues/detail?id=666 -UNADDRESSABLE ACCESS -name=sanity test 02 (malloc/read left) -base_unittests.exe!*ReadValueOutOfArrayBoundsLeft -... -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 03 (malloc/read right) -base_unittests.exe!*ReadValueOutOfArrayBoundsRight -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 04 (malloc/write left) -base_unittests.exe!*WriteValueOutOfArrayBoundsLeft -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 05 (malloc/write right) -base_unittests.exe!*WriteValueOutOfArrayBoundsRight -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -# "..." is needed due to http://code.google.com/p/drmemory/issues/detail?id=666 -UNADDRESSABLE ACCESS -name=sanity test 06 (new/read left) -base_unittests.exe!*ReadValueOutOfArrayBoundsLeft -... -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 07 (new/read right) -base_unittests.exe!*ReadValueOutOfArrayBoundsRight -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 08 (new/write left) -base_unittests.exe!*WriteValueOutOfArrayBoundsLeft -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 09 (new/write right) -base_unittests.exe!*WriteValueOutOfArrayBoundsRight -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 10 (write after free) -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=sanity test 11 (write after delete) -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -INVALID HEAP ARGUMENT -name=sanity test 12 (array deleted without []) -base_unittests.exe!base::ToolsSanityTest_ArrayDeletedWithoutBraces_Test::TestBody - -INVALID HEAP ARGUMENT -name=sanity test 13 (single element deleted with []) -base_unittests.exe!base::ToolsSanityTest_SingleElementDeletedWithBraces_Test::TestBody - -UNINITIALIZED READ -name=sanity test 14 (malloc/read uninit) -base_unittests.exe!*ReadUninitializedValue -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToMallocMemory_Test::TestBody - -UNINITIALIZED READ -name=sanity test 15 (new/read uninit) -base_unittests.exe!*ReadUninitializedValue -base_unittests.exe!*MakeSomeErrors -base_unittests.exe!base::ToolsSanityTest_AccessesToNewMemory_Test::TestBody - -UNADDRESSABLE ACCESS -name=AboutHandler::AboutCrash deliberate crash -# TODO(bruening): switch to annotation once have support for that -chrome.dll!AboutHandler::AboutCrash - -UNADDRESSABLE ACCESS -name=NPAPITesterBase.NoHangIfInitCrashes deliberate crash -# function is small, little risk for false negative in rest of it -# TODO(bruening): switch to annotation once have support for that -npapi_test_plugin.dll!NPAPIClient::PluginClient::Initialize - -# Deliberate NULL deref to crash the child process -UNADDRESSABLE ACCESS -name=CrashingChildProcess deliberate crash -*!CrashingChildProcess - -UNADDRESSABLE ACCESS -name=::Crasher::Run deliberate crash -*!base::`anonymous namespace'::Crasher::Run - -############################ -# Benign issues in Chromium - -WARNING -name=http://crbug.com/72463 - prefetches in generated MemCopy -instruction=prefetch* - -chrome.dll!v8::internal::CopyChars* - -WARNING -name=prefetches in NVD3DUM.dll -instruction=prefetch* -NVD3DUM.dll!* - -WARNING -name=prefetches in igdumd32.dll -instruction=prefetch* -igdumd32.dll!* - -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=582 bizarre cl-generated read-beyond-TOS -instruction=mov 0xfffffffc(%esp) -> %eax -chrome.dll!WebCore::RenderStyle::resetBorder* - -INVALID HEAP ARGUMENT -name=http://crbug.com/101537 -*!scoped_ptr<_TOKEN_USER>* - -INVALID HEAP ARGUMENT -name=http://crbug.com/101717 (1) -*!scoped_ptr<_TOKEN_DEFAULT_DACL>* - -INVALID HEAP ARGUMENT -name=http://crbug.com/101717 (2) -*!sandbox::PolicyBase::~PolicyBase - -INVALID HEAP ARGUMENT -name=http://crbug.com/101717 (3) -*!scoped_ptr<_UNICODE_STRING>::~scoped_ptr<_UNICODE_STRING> -*!sandbox::GetHandleName - -INVALID HEAP ARGUMENT -name=http://crbug.com/101717 (4) -*!scoped_ptr<_OBJECT_NAME_INFORMATION>::~scoped_ptr<_OBJECT_NAME_INFORMATION> -*!sandbox::GetPathFromHandle - -GDI USAGE ERROR -name=http://code.google.com/p/drmemory/issues/detail?id=899 deleting bitmap which is probably safe -system call NtGdiDeleteObjectApp -*!skia::`anonymous namespace'::Bitmap::~Bitmap -*!skia::`anonymous namespace'::Bitmap::`scalar deleting destructor' - -############################ -# Real issues in Chromium - -UNADDRESSABLE ACCESS -name=http://crbug.com/88213 -*!base::win::ObjectWatcher::StopWatching -*!base::win::ObjectWatcher::WillDestroyCurrentMessageLoop -*!MessageLoop::~MessageLoop - -UNADDRESSABLE ACCESS -name=http://crbug.com/96010 -*!TestingProfile::FinishInit -*!TestingProfile::TestingProfile -*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody - -UNADDRESSABLE ACCESS -name=http://crbug.com/106522 -npapi_test_plugin.dll!NPAPIClient::PluginTest::id -npapi_test_plugin.dll!NPAPIClient::ExecuteGetJavascriptUrlTest::TimerProc - -GDI USAGE ERROR -name=http://crbug.com/109963 c -system call NtGdiDeleteObjectApp -GDI32.dll!DeleteDC -content.dll!* - -GDI USAGE ERROR -name=http://crbug.com/109963 d -system call NtGdiDeleteObjectApp -GDI32.dll!DeleteDC -*!base::internal::RunnableAdapter* - -# GDI usage errors in 3rd-party components -GDI USAGE ERROR -name=http://crbug.com/119552 a -system call NtGdiDeleteObjectApp -... -*!OmniboxViewWin::* - -GDI USAGE ERROR -name=http://crbug.com/119552 b -system call Nt* -... -*!ATL::* - -GDI USAGE ERROR -name=http://crbug.com/119552 c -# optional gdi32.dll frame followed by user32.dll -# TODO(bruening): once have -# http://code.google.com/p/drmemory/issues/detail?id=846 -# I would do "gdi32.dll!...\nuser32.dll!*" -*32.dll!* -... -shell32.dll!SHGetFileInfoW -*!IconLoader::ReadIcon - -GDI USAGE ERROR -name=http://crbug.com/119552 d -system call NtGdiDeleteObjectApp -gdi32.dll!DeleteObject -riched20.dll!* -riched20.dll!* -riched20.dll!* - -GDI USAGE ERROR -name=http://crbug.com/120157 -# "ReleaseDC called from different thread than GetDC" -system call NtUserCallOneParam.RELEASEDC -*!*FontCache::CacheElement::~CacheElement - -GDI USAGE ERROR -name=http://crbug.com/158090 -# "DC created by one thread and used by another" -... -content.dll!content::*::FontCache::PreCacheFont -content.dll!content::FontCacheDispatcher::OnPreCacheFont -content.dll!DispatchToMethod - -WARNING -name=Security test (calloc overflow) -*!`anonymous namespace'::CallocReturnsNull -*!`anonymous namespace'::SecurityTest_CallocOverflow_Test::TestBody -*!testing::internal::HandleExceptionsInMethodIfSupported - -GDI USAGE ERROR -name=http://crbug.com/234484 -# "DC created by one thread and used by another" -... -*!chrome::`anonymous namespace'::SetOverlayIcon - -INVALID HEAP ARGUMENT -name=http://crbug.com/262088 -drmemorylib.dll!av_dup_packet -msvcrt.dll!wcsrchr -ntdll.dll!RtlIsCurrentThreadAttachExempt -ntdll.dll!LdrShutdownThread -ntdll.dll!RtlExitUserThread - -GDI USAGE ERROR -name=http://crbug.com/266484 -skia.dll!HDCOffscreen::draw -skia.dll!SkScalerContext_GDI::generateImage -skia.dll!SkScalerContext::getImage -skia.dll!SkGlyphCache::findImage -skia.dll!D1G_NoBounder_RectClip -skia.dll!SkDraw::drawText diff --git a/chromium/tools/valgrind/drmemory/suppressions_full.txt b/chromium/tools/valgrind/drmemory/suppressions_full.txt deleted file mode 100644 index 76a1dfb4ce5..00000000000 --- a/chromium/tools/valgrind/drmemory/suppressions_full.txt +++ /dev/null @@ -1,1337 +0,0 @@ -# This file contains suppressions for the Dr.Memory tool, see -# http://dev.chromium.org/developers/how-tos/using-drmemory -# -# This file should contain suppressions only for the reports happening -# in the 'full' mode (drmemory_full). -# For the reports that can happen in the light mode (a.k.a. drmemory_light), -# please use suppressions.txt instead. - -############################################################### -# Known reports on the third party we have no control over. -UNINITIALIZED READ -name=deflate UNINIT -... -*!deflate_* -*!MOZ_Z_deflate - -# TODO(timurrrr): check if these frames change when NT_SYMBOLS are present. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=406 -ADVAPI32.dll!WmiOpenBlock -ADVAPI32.dll!WmiOpenBlock - -# Leaks inside GoogleDesktop - it injects into our processes for some reason -LEAK -name=GoogleDesktop LEAK -... -GoogleDesktopNetwork3.DLL!DllUnregisterServer - -# They deliberately use uninit local var in sqlite random generator -# random byte may mess up the call stack between randomByte and -# sqlite3_randomness -UNINITIALIZED READ -name=sqlite3_randomness UNINIT -*!randomByte -... -*!sqlite3_randomness - -# Intentional leak in WebKit Template Framework for ThreadData. -LEAK -name=intentional WTF ThreadData leak -... -*!WTF::wtfThreadData - -# Happens when winhttp returns ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT. -LEAK -name=http://crbug.com/125558 a -KERNELBASE.dll!LocalAlloc -SECHOST.dll!... -SECHOST.dll!NotifyServiceStatusChange -WINHTTP.dll!... -WINHTTP.dll!WinHttpDetectAutoProxyConfigUrl -*!net::ProxyResolverWinHttp::GetProxyForURL - -# Tiny locale-related leaks in ntdll. Probably system bug. -LEAK -name=http://crbug.com/125558 b -ntdll.dll!... -ntdll.dll!* -KERNELBASE.dll!... -KERNELBASE.dll!GetCPInfoExW -webio.dll!* -webio.dll!* -webio.dll!* -WINHTTP.dll!... -WINHTTP.dll!WinHttpGetIEProxyConfigForCurrentUser -*!net::ProxyConfigServiceWin::GetCurrentProxyConfig - -UNINITIALIZED READ -name=http://crbug.com/30704 #f -libpng.dll!wk_png_write_find_filter -libpng.dll!wk_png_write_row - -############################################################### -# Suppress some false reports due to bugs in Dr.Memory like wrong analysis -# assumptions or unhandled syscalls - -# Please note: the following suppressions were written in the abscense of -# private symbols so may need to be updated when we switch to auto-loading PDBs -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (1) -ntdll.dll!Rtl* -ntdll.dll!Rtl* -ntdll.dll!RtlFindActivationContextSectionString - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (2) -... -SHELL32.dll!SHFileOperation* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (3) -... -SHELL32.dll!SHGetFolderPath* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=12 (4) -... -SHELL32.dll!SHGetFolderPath* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (5) -... -SHELL32.dll!SHCreateDirectory* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (6) -... -SHELL32.dll!ILLoadFromStream* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (7) -... -SHELL32.dll!ILSaveToStream* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=12 (8) -... -SHELL32.dll!SHFileOperation* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=12 (9) -... -SHELL32.dll!SHGetItemFromDataObject - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=12 (10) -... -SHELL32.dll!SHGetItemFromDataObject - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=12 (11) -... -ole32.dll!* -SHELL32.dll!SHChangeNotifySuspendResume - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=14 (1) -... -*!CreateProcess* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=14 (2) -... -*!CreateProcess* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=14 (3) -... -*!base::LaunchApp* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=17 (1) -... -*!CreateWindow* - -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=17 (2) -GDI32.dll!* -GDI32.dll!CreateFontIndirectExW -GDI32.dll!CreateFontIndirectW - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=17 (3) -KERNELBASE.dll!LocalAlloc -... -USER32.dll!CreateWindow* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=18 a -... -*!CoInitialize* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=18 b -... -*!CoCreateInstance* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=18 c -... -*!CoUninitialize* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=18 d -... -UxTheme.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=40 a -... -WINSPOOL.DRV!* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=40 b -... -WINSPOOL.DRV!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=48 a -system call NtContinue -... -*!*SetThreadName - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=48 b -system call NtContinue -*!WTF::initializeCurrentThreadInternal - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=52 a -... -DBGHELP.dll!SymInitialize - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=52 b -... -DBGHELP.dll!SymEnumSourceFiles - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=52 c -... -msvcrt.dll!_RTDynamicCast - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=52 bit-level fp in dbghelp -instruction=test 0x*(%*) $0x?? -DBGHELP.dll!SymUnloadModule64 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=53 -ADVAPI32.dll!WmiMofEnumerateResourcesA -ADVAPI32.dll!WmiMofEnumerateResourcesA -ADVAPI32.dll!Sta*TraceW - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=58 -... -*!_cfltcvt_l - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=60 -USP10.dll!* -... -USP10.dll!ScriptStringAnalyse - -LEAK -IMM32.dll!ImmGetIMCCSize -IMM32.dll!ImmLockClientImc -IMM32.dll!ImmDisableIME -IMM32.dll!ImmSetActiveContext -USER32.dll!IMPSetIMEA - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=65 a -... -*!SystemFunction036 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=65 b -... -*!talk_base::CreateRandomString - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=68 a -... -WS2_32.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=68 b -... -ADVAPI32.dll!SetSecurityDescriptorDacl - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=68 c -... -MSWSOCK.dll!WSPStartup - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=68 d -... -ntdll.dll!RtlValidateUnicodeString - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=256 -*!_mtinit -*!__tmainCRTStartup -*!mainCRTStartup - -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=274 a -... -GDI32.dll!CreateDCW - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=274 b -... -GDI32.dll!CreateDCW - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=275 -... -*!_getptd* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=276 -... -ntdll.dll!RtlConvertUlongToLargeInteger -ntdll.dll!RtlConvertUlongToLargeInteger -ntdll.dll!KiUserExceptionDispatcher - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=305 -*!free -*!free -*!operator new -... -*!MiniDumpWriteDump - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=346 a -... -GDI32.dll!CloseEnhMetaFile - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=346 b -GDI32.dll!SetPolyFillMode -GDI32.dll!CreateICW - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=362 -USER32.dll!UnregisterClass* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=382 -... -ntdll.dll!CsrNewThread - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=397 -system call NtDeviceIoControlFile InputBuffer -ADVAPI32.dll!ImpersonateAnonymousToken - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=407 a -system call NtRequestWaitReplyPort -RPCRT4.dll!I_RpcSendReceive -RPCRT4.dll!NdrSendReceive - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=407 b -IMM32.dll!* -ntdll.dll!LdrInitializeThunk -ntdll.dll!LdrShutdownThread - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 a -ADVAPI32.dll!RegDeleteValue* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 b -... -ADVAPI32.dll!Crypt* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 c -... -RPCRT4.dll!NdrClientCall2 - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=412 d -RSAENH.dll!DllUnregisterServer -... -ADVAPI32.dll!CryptAcquireContextA -CRYPT32.dll!CryptEnumOIDFunction -... -CRYPT32.dll!CertFindCertificateInStore - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 e -... -RSAENH.dll!CPGenRandom - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 f -... -CRYPT??.dll!Crypt* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 g -*!replace_memcmp -... -*!testing::internal::CmpHelperEQ* -... -*!SymmetricKeyTest_ImportGeneratedKey_Test::TestBody - -# We get these sometimes from AesEncrypt and AesExpandKey. AesEncrypt doesn't -# have frame pointers, and we have trouble unwinding from it. Therefore, we use -# this broad suppression, effectively disabling uninit checks in rsaenh.dll. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=412 h -RSAENH.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=425 a -CLBCatQ.DLL!DestroyStgDatabase -CLBCatQ.DLL!PostError -CLBCatQ.DLL!PostError - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=425 b -RPCRT4.dll!I_RpcBCacheFree -RPCRT4.dll!I_RpcBCacheFree -... -RPCRT4.dll!NdrClientCall2 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=425 c -msdmo.dll!* -msdmo.dll!* -DEVENUM.DLL!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=435 a -... -ntdll.dll!RtlSetSecurityObject -ntdll.dll!RtlNewSecurityObjectEx -ADVAPI32.dll!CreatePrivateObjectSecurityEx -NTMARTA.dll!AccRewriteSetNamedRights - -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=435 b -WLDAP32.dll!Ordinal325 -... -WLDAP32.dll!Ordinal325 -ntdll.dll!LdrInitializeThunk -ntdll.dll!LdrFindResourceDirectory_U -ntdll.dll!RtlValidateUnicodeString -ntdll.dll!LdrLoadDll -KERNEL32.dll!LoadLibraryExW - -# mod+offs suppression because the symbolic makes no sense and changes -# completely in the presence of WS2_32.dll symbols. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=438 - - - - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=454 a -... -WINMM.dll!wave*GetNumDevs - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=454 b -... -WINMM.dll!wave*GetNumDevs - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=466 -ntdll.dll!RtlRunOnceBeginInitialize -ntdll.dll!RtlInitializeCriticalSectionAndSpinCount - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=471 a -*!media::AudioRendererAlgorithmOLA::Crossfade -*!media::AudioRendererAlgorithmOLA::FillBuffer -*!media::AudioRendererAlgorithmOLATest_FillBuffer_* - -# Uninit reported in copy ctor. Would be nice if we could specify which ctor -# overload to suppress. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=471 b -*!WebCore::FormDataElement::FormDataElement - -# Another default copy ctor uninit. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=471 c -*!WebCore::CachedResourceLoader::InitiatorInfo::InitiatorInfo -... -*!WTF::Hash* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=473 a -system call NtDeviceIoControlFile InputBuffer -... -iphlpapi.dll!GetAdaptersAddresses - -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=473 b -ESENT.dll!* -ESENT.dll!* -ESENT.dll!* -ntdll.dll!Ldr*Init* -ntdll.dll!Ldr* -ntdll.dll!* -ntdll.dll!LdrLoadDll -... -iphlpapi.dll!GetPerAdapterInfo -... -iphlpapi.dll!GetAdaptersAddresses - -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=473 c -RPCRT4.dll!* -RPCRT4.dll!* -... -IPHLPAPI.DLL!GetAdaptersAddresses - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=475 -... -ADVAPI32.dll!CryptAcquireContextA -... -CRYPT32.dll!CryptMsgOpenToDecode -... -CRYPT32.dll!CryptQueryObject - -# Lots of leaks from our interactions with the system certificate store. May be -# worth reviewing our use of their API. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 a -KERNEL*.dll!LocalAlloc -... -CRYPT32.dll!CertGetCRLContextProperty - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 b -KERNEL*.dll!LocalAlloc -... -CRYPT32.dll!CertAddCRLContextToStore - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 c -KERNEL*.dll!LocalAlloc -... -CRYPT32.dll!CertOpenStore - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 d -... -CRYPT32.dll!CertOpenSystemStore? - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 e -... -CRYPT32.dll!CertGetCertificateChain - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 f -... -CRYPT32.dll!CertCompareIntegerBlob - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 g -... -CRYPT32.dll!CryptUnprotectData - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 h -KERNEL*.dll!LocalAlloc -... -CRYPT32.dll!CertEnumCertificatesInStore - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 i -... -CRYPT32.dll!CryptProtectData - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=476 j -... -CRYPT32.dll!CryptExportPublicKeyInfoEx - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=502 a -system call NtSecureConnectPort parameter #3 -GDI32.dll!* -GDI32.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=502 b -system call NtGdiEnumFonts parameter #6 -GDI32.dll!* -GDI32.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=511 a -RPCRT4.dll!... -ole32.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=511 b -ole32.dll!* -ole32.dll!* -ole32.dll!StringFromGUID2 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=512 a -... -*!browser_sync::Cryptographer::PackBootstrapToken -*!browser_sync::Cryptographer::GetBootstrapToken - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=512 b -... -*!Encrypt* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=513 a -*!v8* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=513 b -*!* -*!v8* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=513 c - -... -*!v8* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=546 -... -mscms.dll!* -... -GDI32.dll!* -*!IconUtil::Create*HICON* - -LEAK -name=http://crbug.com/92152 -... -USER32.dll!CreateWindowExW -*!views::TooltipManagerWin::Init -*!views::TooltipManagerWin::TooltipManagerWin - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=567 a -dbghelp.dll!* -... -dbghelp.dll!StackWalk64 - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=567 b -*!* -dbghelp.dll!* -... -dbghelp.dll!StackWalk64 - -# Symbols w/o PDB make no sense, first ntdll frame is TpSetTimer w/o syms and -# TppWorkerThread w/ syms. We used to use mod+offs here, but that was too -# brittle, so we switched to RPCRT4.dll!*. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=569 -RPCRT4.dll!... -ntdll.dll!* -ntdll.dll!* -KERNEL*.dll!BaseThreadInitThunk - -# TODO(timurrrr): investigate these -UNINITIALIZED READ -name=http://crbug.com/TODO a -... -*!win_util::GetLogonSessionOnlyDACL - -UNINITIALIZED READ -name=http://crbug.com/TODO b -... -ntshrui.dll!IsPathSharedW - -UNINITIALIZED READ -name=http://crbug.com/TODO c -... -*!NetApiBufferFree - -UNINITIALIZED READ -name=http://crbug.com/TODO d -... -*!ShellExecute* - -UNINITIALIZED READ -name=http://crbug.com/TODO e -... -*!SHParseDisplayName - -UNINITIALIZED READ -name=http://crbug.com/TODO f -... -*!GetCanonicalPathInfo* - -UNINITIALIZED READ -name=http://crbug.com/TODO g -... -SHELL32.dll!Ordinal* - -UNINITIALIZED READ -name=http://crbug.com/TODO h -... -GDI32.dll!GetTextExtentPoint32* - -UNINITIALIZED READ -name=http://crbug.com/TODO i -... -*!SyncSocketClientListener::OnMsgClassResponse - -UNINITIALIZED READ -name=http://crbug.com/TODO j -... -*!*NSPRInitSingleton* - -UNINITIALIZED READ -name=http://crbug.com/TODO k -*!NdrSimpleStructFree - -UNINITIALIZED READ -name=http://crbug.com/TODO l -ntdll.dll!RtlpNtOpenKey -ntdll.dll!RtlMakeSelfRelativeSD -ntdll.dll!RtlAbsoluteToSelfRelativeSD -ADVAPI32.dll!MakeSelfRelativeSD - -UNINITIALIZED READ -name=http://crbug.com/TODO m -... -CRYPT32.dll!I_CertSyncStore - -# This matches the same stack as DrMem i#751, but it's an uninit read instead of -# a leak. Must be some early thread initialization. Doesn't look like -# bit-level though. -UNINITIALIZED READ -name=http://crbug.com/TODO n -RPCRT4.dll!* -RPCRT4.dll!* -RPCRT4.dll!* -ntdll.dll!* -ntdll.dll!* -KERNEL*.dll!BaseThreadInitThunk - -# No idea where this is from, but Chrome isn't even on the stack. -POSSIBLE LEAK -name=http://crbug.com/TODO o -RPCRT4.dll!... -ole32.dll!OleInitialize -ole32.dll!... -KERNEL32.dll!BaseThreadInitThunk - -# Matches lots of RPC related leaks. So far RPC handles have been mostly owned -# by system libraries and are not something we can fix easily. -POSSIBLE LEAK -name=http://crbug.com/TODO p -RPCRT4.dll!* -RPCRT4.dll!* -RPCRT4.dll!NDRCContextBinding - -# No idea, but all system code, not interesting. -POSSIBLE LEAK -name=http://crbug.com/TODO q -RPCRT4.dll!... -RPCRT4.dll!* -RPCRT4.dll!* -ole32.dll!... -ole32.dll!* -ole32.dll!* -... -SHELL32.dll!* - -LEAK -name=http://crbug.com/109278 video device COM leaks -... -*!media::VideoCaptureDevice::* - -LEAK -name=http://crbug.com/109278 audio device COM leaks -... -*!media::GetInputDeviceNamesWin - -# False pos uninit in shell32 when resolving links. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=745 -SHELL*.dll!* -... -SHELL*.dll!* -*!file_util::ResolveShortcut - -# Probable false pos uninit in ffmpeg. Probably due to running off the end of a -# buffer with SSE/MMX instructions whose results are then masked out later. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 a -*!ff_pred4x4_vertical_vp8_mmxext - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 b -*!ff_pred4x4_down_left_mmxext - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 c -*!ff_vorbis_floor1_render_list - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 d -*!ff_put_vp8_epel8_h6_ssse3 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 e -*!ff_put_vp8_epel8_h4_ssse3 - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 f -*!ff_fft_permute_sse - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=747 g -*!ff_simple_idct_add_mmx - -# ffmpeg seems to leak a pthread condition variable. -LEAK -name=http://crbug.com/110042 -*!ptw32_new -*!pthread_self -*!sem_wait -*!pthread_cond_wait -*!ff_thread_decode_frame -*!avcodec_decode_video2 - -# Improperly handled ioctl in bcrypt. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=748 -system call NtDeviceIoControlFile InputBuffer -bcrypt.dll!BCryptUnregisterConfigChangeNotify -bcrypt.dll!BCryptGetFipsAlgorithmMode -ntdll.dll!RtlQueryEnvironmentVariable - -# Not sure what this is. -POSSIBLE LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=749 -... -fwpuclnt.dll!* -... -RPCRT4.dll!* -... -fwpuclnt.dll!* -... -WS2_32.dll!* -*!talk_base::SafeGetHostByName -*!talk_base::SocketAddress::GetLocalIPs -*!talk_base::SocketAddress::IsLocalIP -*!cricket::Transport::VerifyCandidate -*!cricket::Session::OnRemoteCandidates -*!cricket::Session::OnTransportInfoMessage -*!cricket::Session::OnIncomingMessage -*!cricket::SessionManager::OnIncomingMessage - -# More uninit false pos in rpcrt4.dll not caught by default suppressions. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=529 -RPCRT4.dll!* -... -*!base::LaunchProcess - -# System leak from CreateEnvironmentBlock. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=757 -... -USERENV.dll!CreateEnvironmentBlock - -# Looks like another instance of 753 -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=753 -... -ntdll.dll!RtlLoadString - -# More bit manip fps -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=493 -USP10.dll!ScriptPositionSingleGlyph - -# Various TLS leaks that we don't understand yet. We should be finding a root -# for these. -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=778 a -KERNELBASE.dll!TlsSetValue - -# Originally filed as: http://crbug.com/109281 -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=778 b -*!operator new -*!operator new[] -*!*::ConstructTlsVector -*!base::ThreadLocalStorage::StaticSlot::Get - -# This is an NSS PRThread object installed in TLS. Why isn't this detected as a -# root? See also http://crbug.com/32624 -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=778 c -*!PR_Calloc -*!_PR_AttachThread -*!_PRI_AttachThread - -# Bit-level fps in rich edit layer. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=791 -RICHED20.dll!* -RICHED20.dll!* - -# Already suppressed by drmemory default supp we don't have yet. -LEAK -name=i#757: RPC binding leaks in sspicli.dll -RPCRT4.dll!* -... -SspiCli.dll!* -SspiCli.dll!Cre* - -# Async NtReadFile false positives. This was fixed in drmemory r772, remove -# this supp when we pull that rev. -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=798 -system call NtReadFile parameter #5 -KERNEL32.dll!ReadFile - -# Probable syscall false positive. -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=809 -system call NtGdiPolyPolyDraw parameter #1 -*!gfx::Path::CreateNativeRegion - -# Very wide suppression for all uninits in rpcrt4.dll. We get bad stack traces -# coming out of this module (sometimes only one frame), which makes it hard to -# write precise suppressions. Until we have bit-level tracking (DRMi#113) we -# should keep this. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=113 rpcrt4.dll wildcard -RPCRT4.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=841 a -... -CRYPTNET.dll!I_CryptNetGetConnectivity - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=841 b -... -webio.dll!* - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=841 c -... -winhttp.dll!* - -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=841 d -... -CRYPTNET.dll!I_CryptNetGetConnectivity - -# Often missing a ntdll.dll!KiUserCallbackDispatcher frame. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=810 -instruction=test %edx %edx -USER32.dll!GetClassLongW -... -*!ui::CenterAndSizeWindow - -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=815 -KERNEL*.dll!... -dxgi.dll!* -USER32.dll!GetMonitorInfoA -ntdll.dll!KiUserCallbackDispatcher -dxgi.dll!* -WinSATAPI.DLL!* - -# Suppress anything in cmd.exe. It's safer to suppress these than disable -# following, since someone might launch a Chrome process via cmd.exe. -LEAK -name=cmd.exe -... -cmd.exe!* - -# Possible true system use after free. -UNADDRESSABLE ACCESS -name=http://code.google.com/p/drmemory/issues/detail?id=623 -KERNELBASE.dll!TlsGetValue -OLEAUT32.dll!SysFreeString -OLEAUT32.dll!SysAllocStringByteLen -OLEACC.dll!* -OLEACC.dll!* -OLEACC.dll!* -OLEACC.dll!* - -# basic_streambuf seems to leak something in creating a std::_Mutex -LEAK -name=http://code.google.com/p/drmemory/issues/detail?id=857 -ntdll.dll!... -ntdll.dll!RtlInitializeCriticalSection -*!_Mtxinit -*!std::_Mutex::_Mutex -*!std::basic_streambuf<*> - -# stdext::hash_map<> seems to swap uninitialized floats. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=931 -*!std::swap -*!std::_Hash<* - -# syscall false positive on handling NtQuerySystemInformation, fix in soon. -UNINITIALIZED READ -name=http://code.google.com/p/drmemory/issues/detail?id=932 -KERNEL32.dll!K32GetPerformanceInfo - -# Seems to create a DC, sometimes. GetTextMetrics returns no pointers, though. -LEAK -name=GDI SetBrushOrgEx leak -GDI32.dll!... -GDI32.dll!GetTextMetricsW -*!gfx::PlatformFontWin::CreateHFontRef -*!gfx::PlatformFontWin::GetBaseFontRef - -############################################################### -# Benign issues in Chromium - -# This test intentionally leaks an object and checks that it's never deleted. -LEAK -name=BrowserThreadTest.NotReleasedIfTargetThreadNonExistant leak -... -*!BrowserThreadTest_NotReleasedIfTargetThreadNonExistent_Test::TestBody - -LEAK -name=deliberate histogram leak -... -*!replace_operator_new -... -*!*::*Histogram::FactoryGet - -LEAK -name=deliberate leak for SampleMap -... -*!base::SampleMap::Accumulate -*!base::SparseHistogram::Add - -LEAK -name=deliberate LazyInstance leak -... -*!*LeakyLazyInstance* -... -*!base::LazyInstance*::Pointer - -LEAK -name=http://crbug.com/79933 (1) -... -*!TestURLRequestContext::Init - -LEAK -name=http://crbug.com/79933 (2) -... -*!TestURLRequestContext::TestURLRequestContext -*!TestURLRequestContextGetter::GetURLRequestContext -*!notifier::SingleLoginAttempt::SingleLoginAttempt -*!notifier::Login::StartConnection -*!syncer::InvalidationNotifier::UpdateCredentials -*!syncer::NonBlockingInvalidationNotifier::Core::UpdateCredentials - -LEAK -name=http://crbug.com/79933 (3) -... -*!TestURLRequestContext::TestURLRequestContext -*!TestURLRequestContextGetter::GetURLRequestContext -*!URLFetcher::Core::StartURLRequest - -LEAK -name=http://crbug.com/79933 (4) -*!generic_cpp_alloc -*!operator new -*!std::_Allocate -*!std::allocator::allocate -*!std::vector >::_Insert_n -*!std::vector >::insert -*!std::vector >::push_back -*!ObserverListBase::AddObserver -... -*!net::HttpNetworkSession::HttpNetworkSession -*!notifier::ProxyResolvingClientSocket::ProxyResolvingClientSocket -*!notifier::XmppClientSocketFactory::CreateTransportClientSocket -*!notifier::ChromeAsyncSocket::Connect -*!buzz::XmppClient::ProcessStartXmppLogin -*!buzz::XmppClient::Process -*!talk_base::Task::Step -*!talk_base::TaskRunner::InternalRunTasks -*!talk_base::TaskRunner::RunTasks -*!notifier::TaskPump::CheckAndRunTasks -*!base::internal::RunnableAdapter::Run - -# Test intentionally leaks an object. -LEAK -name=http://crbug.com/86301 -*!replace_operator_new -... -*!*_DeadReplyLoopDoesNotDelete_Test::TestBody - -# Leak in a binary copy of Firefox 3's NSS dll. Not much we can do about it. -LEAK -name=Firefox 3 NSS dll leak -nspr4.dll!* -... -*!NSSDecryptor::~NSSDecryptor - -# We get uninit reports inside GMock when it prints the bytes of references to -# partially initialized objects passed to unexpected method calls. -UNINITIALIZED READ -name=GMock printing uninit data -... -*!testing::internal2::PrintBytesInObjectTo - -############################################################### -# Real issues in Chromium - -LEAK -name=http://crbug.com/32085 -... -chrome.dll!NotificationRegistrar::Add - -LEAK -name=http://crbug.com/32623 -... -*!ssl3_HandleHandshakeMessage -*!ssl3_HandleHandshake -*!ssl3_HandleRecord -*!ssl3_GatherCompleteHandshake -... -*!SSL_ForceHandshake -*!net::SSLServerSocketNSS::DoHandshake -*!net::SSLServerSocketNSS::DoHandshakeLoop - -UNINITIALIZED READ -name=http://crbug.com/57266 (1) -... -*!remoting::EncoderVp8::Encode - -UNINITIALIZED READ -name=http://crbug.com/57266 (2) -... -*!vp8_* - -LEAK -name=http://crbug.com/70062 -*!PR_Calloc -*!PR_NewLock -... -*!InitSessionCacheLocks -*!initSessionCacheLocksLazily -*!PR_CallOnce -*!ssl_InitSessionCacheLocks -*!lock_cache -*!ssl_LookupSID -*!ssl2_BeginClientHandshake -*!ssl_Do1stHandshake -*!SSL_ForceHandshake -*!net::SSL*SocketNSS::DoHandshake -*!net::SSL*SocketNSS::DoHandshakeLoop - -LEAK -name=http://crbug.com/74417 a -*!replace_operator_new -*!disk_cache::BackendImpl::CreateEntryImpl - -LEAK -name=http://crbug.com/74417 b -*!replace_operator_new -*!disk_cache::BackendImpl::NewEntry - -# One more disk_cache::BackendImpl leak. See also http://crbug.com/87500. -LEAK -name=http://crbug.com/74417 c -*!replace_operator_new -... -*!disk_cache::EntryImpl::UserBuffer::UserBuffer - -LEAK -name=http://crbug.com/75247 -... -*!replace_operator_new -*!AutofillDownloadTestHelper::AutofillDownloadTestHelper - -LEAK -name=http://crbug.com/78784 -*!generic_cpp_alloc -*!operator new -*!TestingProfile::CreateRequestContext -*!*ProfileSyncService*::SetUp - -LEAK -name=http://crbug.com/80550 (1) -... -*!RenderWidgetHost::WasHidden - -LEAK -name=http://crbug.com/80550 (2) -... -*!RenderWidgetHost::WasRestored - -LEAK -name=http://crbug.com/87612 -... -*!SSL_ConfigSecureServer -*!net::SSLServerSocketNSS::InitializeSSLOptions -*!net::SSLServerSocketNSS::Handshake - -LEAK -name=http://crbug.com/88640 -*!generic_cpp_alloc -*!operator new -*!ProfileImpl::InitRegisteredProtocolHandlers -*!ProfileImpl::DoFinalInit -*!ProfileImpl::OnPrefsLoaded - -LEAK -name=http://crbug.com/91465 -*!generic_cpp_alloc -*!operator new -*!browser_sync::internal::WeakHandleCore::* -*!browser_sync::WeakHandle::* -*!syncer::SyncManager::SyncInternal::Init - -LEAK -name=http://crbug.com/91491 -... -*!CrxUpdateService::ProcessPendingItems - -UNINITIALIZED READ -name=http://crbug.com/92026 (1) -softokn3.dll!FC_GetFunctionList -... -softokn3.dll!NSC_ModuleDBFunc - -UNINITIALIZED READ -name=http://crbug.com/92026 (2) -freebl3.dll!FREEBL_GetVector -... -softokn3.dll!NSC_ModuleDBFunc - -LEAK -name=http://crbug.com/92166 -... -*!replace_operator_new -*!views::NativeWidgetWin::OnCreate - -# Possible real Chromium issue in DoCrossfade. -UNINITIALIZED READ -name=http://crbug.com/110049 -*!media::DoCrossfade<*> -*!media::Crossfade -*!media::AudioRendererAlgorithmBase::FillBuffer - -# Known sqlite3 leaks. -LEAK -name=http://crbug.com/113847 (1) -... -*!sqlite3MemMalloc -*!mallocWithAlarm -*!sqlite3Malloc -... -*!yy_reduce - -LEAK -name=http://crbug.com/113847 (2) -... -*!openDatabase -*!sqlite3_open - -LEAK -name=http://crbug.com/115328 -... -*!GenericInfoViewTest_GenericInfoView_Test::TestBody - -UNINITIALIZED READ -name=http://crbug.com/116277 -*!MOZ_Z_deflate -*!zipCloseFileInZipRaw64 - -LEAK -name=http://crbug.com/117427 a -... -*!net::HostCache::Set -*!net::HostResolverImpl::CacheResult -*!net::HostResolverImpl::Job::CompleteRequests -*!net::HostResolverImpl::Job::OnProcTaskComplete -*!base::internal::RunnableAdapter::Run - -# Probably related to 117427. Someone is not tearing down DNS resolution during -# testing. -LEAK -name=http://crbug.com/117427 b -*!generic_cpp_alloc -*!operator new -*!base::internal::WeakReferenceOwner::GetRef -*!base::SupportsWeakPtr::AsWeakPtr -*!net::HostResolverImpl::Job::Job -*!net::HostResolverImpl::Resolve -*!net::SingleRequestHostResolver::Resolve -*!net::TransportConnectJob::DoResolveHost -*!net::TransportConnectJob::DoLoop -*!net::TransportConnectJob::ConnectInternal -*!net::ConnectJob::Connect -*!net::internal::ClientSocketPoolBaseHelper::RequestSocketInternal -*!net::internal::ClientSocketPoolBaseHelper::RequestSocket -*!net::ClientSocketPoolBase::RequestSocket -*!net::TransportClientSocketPool::RequestSocket -*!net::ClientSocketHandle::Init -*!net::`anonymous namespace'::InitSocketPoolHelper -*!net::InitSocketHandleForRawConnect -*!notifier::ProxyResolvingClientSocket::ProcessProxyResolveDone -*!base::internal::RunnableAdapter::Run - -# IE frame possible leak of COM object. -LEAK -name=http://crbug.com/122399 -ole32.dll!... -ole32.dll!CoTaskMemAlloc -urlmon.dll!... -urlmon.dll!CreateUri -IEFRAME.dll!* - -# RenderWidgetHelper leak in DelayProfileDestruction test. -LEAK -name=http://crbug.com/125565 -*!generic_cpp_alloc -*!operator new -*!RenderProcessHostImpl::RenderProcessHostImpl -*!SiteInstanceImpl::GetProcess -*!BrowserTestOffTheRecord_DelayProfileDestruction_Test::TestBody - -LEAK -name=http://crbug.com/125807 -*!generic_cpp_alloc -*!operator new -*!TransportSecurityPersister::TransportSecurityPersister -*!TransportSecurityPersisterTest::TransportSecurityPersisterTest diff --git a/chromium/tools/valgrind/drmemory_analyze.py b/chromium/tools/valgrind/drmemory_analyze.py deleted file mode 100755 index 7a82b461f3c..00000000000 --- a/chromium/tools/valgrind/drmemory_analyze.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# drmemory_analyze.py - -''' Given a Dr. Memory output file, parses errors and uniques them.''' - -from collections import defaultdict -import common -import hashlib -import logging -import optparse -import os -import re -import subprocess -import sys -import time - -class DrMemoryError: - def __init__(self, report, suppression, testcase): - self._report = report - self._testcase = testcase - - # Chromium-specific transformations of the suppressions: - # Replace 'any_test.exe' and 'chrome.dll' with '*', then remove the - # Dr.Memory-generated error ids from the name= lines as they don't - # make sense in a multiprocess report. - supp_lines = suppression.split("\n") - for l in xrange(len(supp_lines)): - if supp_lines[l].startswith("name="): - supp_lines[l] = "name=" - if supp_lines[l].startswith("chrome.dll!"): - supp_lines[l] = supp_lines[l].replace("chrome.dll!", "*!") - bang_index = supp_lines[l].find("!") - d_exe_index = supp_lines[l].find(".exe!") - if bang_index >= 4 and d_exe_index + 4 == bang_index: - supp_lines[l] = "*" + supp_lines[l][bang_index:] - self._suppression = "\n".join(supp_lines) - - def __str__(self): - output = self._report + "\n" - if self._testcase: - output += "The report came from the `%s` test.\n" % self._testcase - output += "Suppression (error hash=#%016X#):\n" % self.ErrorHash() - output += (" For more info on using suppressions see " - "http://dev.chromium.org/developers/how-tos/using-drmemory#TOC-Suppressing-error-reports-from-the-\n") - output += "{\n%s\n}\n" % self._suppression - return output - - # This is a device-independent hash identifying the suppression. - # By printing out this hash we can find duplicate reports between tests and - # different shards running on multiple buildbots - def ErrorHash(self): - return int(hashlib.md5(self._suppression).hexdigest()[:16], 16) - - def __hash__(self): - return hash(self._suppression) - - def __eq__(self, rhs): - return self._suppression == rhs - - -class DrMemoryAnalyzer: - ''' Given a set of Dr.Memory output files, parse all the errors out of - them, unique them and output the results.''' - - def __init__(self): - self.known_errors = set() - self.error_count = 0; - - def ReadLine(self): - self.line_ = self.cur_fd_.readline() - - def ReadSection(self): - result = [self.line_] - self.ReadLine() - while len(self.line_.strip()) > 0: - result.append(self.line_) - self.ReadLine() - return result - - def ParseReportFile(self, filename, testcase): - ret = [] - - # First, read the generated suppressions file so we can easily lookup a - # suppression for a given error. - supp_fd = open(filename.replace("results", "suppress"), 'r') - generated_suppressions = {} # Key -> Error #, Value -> Suppression text. - for line in supp_fd: - # NOTE: this regexp looks fragile. Might break if the generated - # suppression format slightly changes. - m = re.search("# Suppression for Error #([0-9]+)", line.strip()) - if not m: - continue - error_id = int(m.groups()[0]) - assert error_id not in generated_suppressions - # OK, now read the next suppression: - cur_supp = "" - for supp_line in supp_fd: - if supp_line.startswith("#") or supp_line.strip() == "": - break - cur_supp += supp_line - generated_suppressions[error_id] = cur_supp.strip() - supp_fd.close() - - self.cur_fd_ = open(filename, 'r') - while True: - self.ReadLine() - if (self.line_ == ''): break - - match = re.search("^Error #([0-9]+): (.*)", self.line_) - if match: - error_id = int(match.groups()[0]) - self.line_ = match.groups()[1].strip() + "\n" - report = "".join(self.ReadSection()).strip() - suppression = generated_suppressions[error_id] - ret.append(DrMemoryError(report, suppression, testcase)) - - if re.search("SUPPRESSIONS USED:", self.line_): - self.ReadLine() - while self.line_.strip() != "": - line = self.line_.strip() - (count, name) = re.match(" *([0-9]+)x(?: \(leaked .*\))?: (.*)", - line).groups() - count = int(count) - self.used_suppressions[name] += count - self.ReadLine() - - if self.line_.startswith("ASSERT FAILURE"): - ret.append(self.line_.strip()) - - self.cur_fd_.close() - return ret - - def Report(self, filenames, testcase, check_sanity): - sys.stdout.flush() - # TODO(timurrrr): support positive tests / check_sanity==True - self.used_suppressions = defaultdict(int) - - to_report = [] - reports_for_this_test = set() - for f in filenames: - cur_reports = self.ParseReportFile(f, testcase) - - # Filter out the reports that were there in previous tests. - for r in cur_reports: - if r in reports_for_this_test: - # A similar report is about to be printed for this test. - pass - elif r in self.known_errors: - # A similar report has already been printed in one of the prev tests. - to_report.append("This error was already printed in some " - "other test, see 'hash=#%016X#'" % r.ErrorHash()) - reports_for_this_test.add(r) - else: - self.known_errors.add(r) - reports_for_this_test.add(r) - to_report.append(r) - - common.PrintUsedSuppressionsList(self.used_suppressions) - - if not to_report: - logging.info("PASS: No error reports found") - return 0 - - sys.stdout.flush() - sys.stderr.flush() - logging.info("Found %i error reports" % len(to_report)) - for report in to_report: - self.error_count += 1 - logging.info("Report #%d\n%s" % (self.error_count, report)) - logging.info("Total: %i error reports" % len(to_report)) - sys.stdout.flush() - return -1 - - -def main(): - '''For testing only. The DrMemoryAnalyze class should be imported instead.''' - parser = optparse.OptionParser("usage: %prog ") - - (options, args) = parser.parse_args() - if len(args) == 0: - parser.error("no filename specified") - filenames = args - - logging.getLogger().setLevel(logging.INFO) - return DrMemoryAnalyzer().Report(filenames, None, False) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/valgrind/gdb_helper.py b/chromium/tools/valgrind/gdb_helper.py deleted file mode 100644 index 548ee9474e6..00000000000 --- a/chromium/tools/valgrind/gdb_helper.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -''' A bunch of helper functions for querying gdb.''' - -import logging -import os -import re -import tempfile - -GDB_LINE_RE = re.compile(r'Line ([0-9]*) of "([^"]*)".*') - -def _GdbOutputToFileLine(output_line): - ''' Parse the gdb output line, return a pair (file, line num) ''' - match = GDB_LINE_RE.match(output_line) - if match: - return match.groups()[1], match.groups()[0] - else: - return None - -def ResolveAddressesWithinABinary(binary_name, load_address, address_list): - ''' For each address, return a pair (file, line num) ''' - commands = tempfile.NamedTemporaryFile() - commands.write('add-symbol-file "%s" %s\n' % (binary_name, load_address)) - for addr in address_list: - commands.write('info line *%s\n' % addr) - commands.write('quit\n') - commands.flush() - gdb_commandline = 'gdb -batch -x %s 2>/dev/null' % commands.name - gdb_pipe = os.popen(gdb_commandline) - result = gdb_pipe.readlines() - - address_count = 0 - ret = {} - for line in result: - if line.startswith('Line'): - ret[address_list[address_count]] = _GdbOutputToFileLine(line) - address_count += 1 - if line.startswith('No line'): - ret[address_list[address_count]] = (None, None) - address_count += 1 - gdb_pipe.close() - commands.close() - return ret - -class AddressTable(object): - ''' Object to do batched line number lookup. ''' - def __init__(self): - self._load_addresses = {} - self._binaries = {} - self._all_resolved = False - - def AddBinaryAt(self, binary, load_address): - ''' Register a new shared library or executable. ''' - self._load_addresses[binary] = load_address - - def Add(self, binary, address): - ''' Register a lookup request. ''' - if binary == '': - logging.warn('adding address %s in empty binary?' % address) - if binary in self._binaries: - self._binaries[binary].append(address) - else: - self._binaries[binary] = [address] - self._all_resolved = False - - def ResolveAll(self): - ''' Carry out all lookup requests. ''' - self._translation = {} - for binary in self._binaries.keys(): - if binary != '' and binary in self._load_addresses: - load_address = self._load_addresses[binary] - addr = ResolveAddressesWithinABinary( - binary, load_address, self._binaries[binary]) - self._translation[binary] = addr - self._all_resolved = True - - def GetFileLine(self, binary, addr): - ''' Get the (filename, linenum) result of a previously-registered lookup - request. - ''' - if self._all_resolved: - if binary in self._translation: - if addr in self._translation[binary]: - return self._translation[binary][addr] - return (None, None) diff --git a/chromium/tools/valgrind/gtest_exclude/OWNERS b/chromium/tools/valgrind/gtest_exclude/OWNERS deleted file mode 100644 index 72e8ffc0db8..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/OWNERS +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt deleted file mode 100644 index 9367fd60520..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,26 +0,0 @@ -# TODO(timurrrr) investigate the failures and enable these tests one-by-one. -RSA* -GmockTest.* -EtwTrace* -StatsTableTest.* -ProcessUtilTest.EnableLFH -ScopedNativeLibrary.Basic -# TODO(zhaoqin) investigate the failures and enable it later, 106043 -ConditionVariableTest.LargeFastTaskTest -# Next test creates a child that crashes, which naturally generates an -# unaddressable report as well as a handful of leak reports that we don't need -# to see. -ProcessUtilTest.GetTerminationStatusCrash -# See crbug.com/130668 -ProcessUtilTest.GetTerminationStatusKill -ProcessUtilTest.KillSlowChild -ProcessUtilTest.SpawnChild -ScopedProcessInformationTest.Duplicate -ScopedProcessInformationTest.Swap -ScopedProcessInformationTest.TakeBoth -ScopedProcessInformationTest.TakeProcess -ScopedProcessInformationTest.TakeWholeStruct -SharedMemoryProcessTest.Tasks - -# crbug/144018 -StartupInformationTest.InheritStdOut diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt deleted file mode 100644 index 1f81beacd4a..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Don't run this test under TSan, it takes ~1-2 minutes to pass. -ProcessUtilTest.GetAppOutputRestrictedNoZombies - -# Don't run Memcheck sanity tests under ThreadSanitizer since they can -# corrupt memory. -ToolsSanityTest.*Memory* -ToolsSanityTest.*Delete* - -# TSan doesn't understand SharedMemory locks, see http://crbug.com/45083 -StatsTableTest.*MultipleThreads diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt deleted file mode 100644 index 744ba0f5b5f..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,28 +0,0 @@ -# Occasionally fails under TSan, see http://crbug.com/54229 -ProcessUtilTest.CalcFreeMemory - -# This file is copied from Valgrind-on-Wine filter -# TODO(timurrrr): include/investigate the listed tests one-by-one -EtwTraceControllerTest.EnableDisable -EtwTraceConsumer*Test.* -EtwTraceProvider*Test.* -JSONReaderTest.Reading -TimeTicks.* -WMIUtilTest.* - -# Too slow under TSan -ConditionVariableTest.LargeFastTaskTest - -# Fails under TSan: http://crbug.com/93843 -MessageLoopTest.RecursiveDenial3 - -# Crashes under TSan: http://crbug.com/115107 -WorkerPoolTest.PostTask - -# Times out on Win7, slow on Vista: http://crbug.com/106531 -TraceEventTestFixture.DataCapturedManyThreads - -# Fails and times out occasionally. http://crbug.com/308273 -TraceEventTestFixture.TraceContinuousSampling -TraceEventTestFixture.TraceSampling -TraceEventTestFixture.TraceSamplingScope diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt deleted file mode 100644 index 35c209db10f..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest.txt +++ /dev/null @@ -1,26 +0,0 @@ -# This test currently times out in valgrind, see http://crbug.com/9194 -WatchdogTest.AlarmTest - -# These tests occassionally hangs under Valgrind on Mac. valgrind-darwin r9573 -# Revisit with better valgrind. -# Valgrind bug: https://bugs.kde.org/show_bug.cgi?id=189661 -TimerTest.RepeatingTimer -TimerTest.RepeatingTimer_Cancel - -# Crashes occasionally, see http://crbug.com/7477 -ObserverListThreadSafeTest.CrossThreadObserver -ObserverListThreadSafeTest.CrossThreadNotifications - -# Hangs sometimes on linux, see http://crbug.com/22138 -ClipboardTest.* - -# These tests trigger a CHECK so they will leak memory. They don't test -# anything else, so just disable them on valgrind. Bug 28179. -OutOfMemoryDeathTest.* - -# Flaky under slow tools or just when the VM is under load. -# See http://crbug.com/43972 -ConditionVariableTest.LargeFastTaskTest - -# Flaky under Valgrind, see http://crbug.com/55517 -PlatformFile.TouchGetInfoPlatformFile diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt deleted file mode 100644 index 937bf281d36..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_mac.txt +++ /dev/null @@ -1,20 +0,0 @@ -# Fails on Valgrind/Mac, see http://crbug.com/43972 -ConditionVariableTest.LargeFastTaskTest - -# Fails on Valgrind/Mac due to missing syscall wrapper -# for the symlink() syscall. See http://crbug.com/44001 -FileUtilTest.NormalizeFilePathSymlinks - -# Fails on Valgrind/Mac, see http://crbug.com/53196 -CancellationFlagTest.SetOnDifferentThreadDeathTest - -# Fails on Valgrind/Mac, see http://crbug.com/93722 -ProcessMemoryTest.MacTerminateOnHeapCorruption - -# Fails on Valgrind/Mac, see http://crbug.com/122080 -ProcessMemoryTest.MacMallocFailureDoesNotTerminate - -# Times out on Valgrind/Mac, see http://crbug.com/172044 -MessageLoopTestTypeUI.RecursivePosts -MessageLoopTestTypeIO.RecursivePosts -MessageLoopTestTypeDefault.RecursivePosts diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt deleted file mode 100644 index 1d24cdf8e52..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win-8.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Fails natively as well: http://crbug.com/251517 -PEImageTest.EnumeratesPE diff --git a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt b/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt deleted file mode 100644 index 840a3035070..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/base_unittests.gtest_win32.txt +++ /dev/null @@ -1,12 +0,0 @@ -# Too slow under Valgrind/Wine and TSan/Windows -TimeTicks.WinRollover - -# Very sensitive to slowdown -TimeTicks.Deltas -TimeTicks.HighResNow -TimerTest.RepeatingTimer* - -# This Windows-native sampling profiler test does not work under our tools -# because it assumes the original code runs, not the modified version -# with instrumentation. See http://crbug.com/106829 -SamplingProfilerTest.Sample diff --git a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt deleted file mode 100644 index 0b4079d5212..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,56 +0,0 @@ -# TODO(zhaoqin): File bugs for those failing browser tests. - -# Dr.Memory i#1052: http://code.google.com/p/drmemory/issues/detail?id=1052 -# -# The list is too long for gtest_filter, so we exclude the whole -# test case if any of its tests failed. -*FLAKY* - -# it takes too long to run all browser_tests with Dr.Memory, -# and we only select subset to run -# A*: ~70 tests -A* -# DrM-i#1052-c#52 -# AutofillTest.* -# AcceleratedCompositingBlockedTest.* -# AppApiTest.* -# BrowserAccessibilityStateImplTest.* -B* -C* -D* -E* -F* -G* -# H*: ~35 tests -H* -# DrM-i#1052-c#53 -# HistoryWebUITest.* -# I*: ~10 tests -# DrM-i#1052-c#53 -InfoBarsTest.* -# J*: 0 tests -# K*: 1 tests -L* -M* -N* -O* -P* -Q* -R* -S* -T* -# U*: ~20 tests -# DrM-i#1052-c#53 -UnloadTest.* -# V*: 5 tests -# W*: ~150 tests -W* -# X*: 0 tests -# Y*: 0 tests -# Z*: 0 tests - -# http://crbug.com/302993 -InstantNTPURLRewriteTest.UberURLHandler_InstantExtendedNewTabPage - -# http://crbug.com/328936 -IEImporterBrowserTest.IEImporter diff --git a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt deleted file mode 100644 index bad2936a0ea..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/browser_tests.gtest-memcheck.txt +++ /dev/null @@ -1,60 +0,0 @@ -# Don't run FLAKY or FAILS ui tests under Valgrind. -# They tend to generate way too many flaky Valgrind reports. -*FLAKY_* -*FAILS_* - -# NaCl tests fail with Data Execution Prevention error http://crbug.com/104517 -NaClGdbTest.Empty -PPAPINaClGLibcTest.* -PPAPINaClNewlibTest.* -PPAPINaClTest* - -# http://crbug.com/109336 -OutOfProcessPPAPITest.View_PageHideShow - -# TODO(thestig) File bugs for these failing browser tests. -AllUrlsApiTest.WhitelistedExtension -AppBackgroundPageApiTest.NoJsManifestBackgroundPage -BrowserCloseTest.DownloadsCloseCheck_2 -BrowserCloseTest.DownloadsCloseCheck_5 -BrowserEncodingTest.SLOW_TestEncodingAliasMapping -BrowserNavigatorTest.Disposition_Bookmarks_DoNothingIfIncognitoIsForced -BrowserNavigatorTest.Disposition_Incognito -BrowserNavigatorTest.Disposition_SyncPromo_DoNothingIfIncognitoIsForced -BrowserTest.ForwardDisabledOnForward -ClickToPlayPluginTest.Basic -ClickToPlayPluginTest.LoadAllBlockedPlugins -ClickToPlayPluginTest.NoCallbackAtLoad -DevToolsExperimentalExtensionTest.TestDevToolsExperimentalExtensionAPI -DevToolsExtensionTest.TestDevToolsExtensionMessaging -DownloadExtensionTest.DownloadExtensionTest_FileIcon_Active -DownloadExtensionTest.DownloadExtensionTest_FileIcon_History -DownloadExtensionTest.DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito -DownloadExtensionTestIncognito.DownloadExtensionTest_SearchPauseResumeCancelGetFileIconIncognito -ErrorPageTest.DNSError_Basic -ErrorPageTest.DNSError_GoBack1 -ExecuteScriptApiTest.ExecuteScriptPermissions -ExtensionApiTest.FontSettingsIncognito -ExtensionApiTest.PopupBlockingExtension -ExtensionApiTest.PopupBlockingHostedApp -FastShutdown.SlowTermination -IndexedDBLayoutTest.IndexTests -NetInternalsTest.netInternalsPrerenderViewFail -NewTabUIBrowserTest.LoadNTPInExistingProcess -OutOfProcessPPAPITest.NetAddressPrivate_GetAnyAddress -OutOfProcessPPAPITest.NetAddressPrivate_ReplacePort -PageCyclerCachedBrowserTest.PlaybackMode -PageCyclerCachedBrowserTest.URLNotInCache -PPAPITest.ImeInputEvent -PrerenderBrowserTest.* -PrerenderBrowserTestWithNaCl.PrerenderNaClPluginEnabled -PrintPreviewWebUITest.TestPrinterList -PrintPreviewWebUITest.TestPrinterListCloudEmpty -PrintPreviewWebUITest.TestSectionsDisabled -PrintWebViewHelperTest.BlockScriptInitiatedPrinting -SafeBrowsingBlockingPageTest.MalwareDontProceed -SafeBrowsingBlockingPageTest.ProceedDisabled -SocketApiTest.SocketTCPExtension -SocketApiTest.SocketUDPExtension -SSLUITest.TestWSSInvalidCertAndGoForward -WebViewTest.Shim diff --git a/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt deleted file mode 100644 index a73d3879dce..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/components_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Fails http://crbug.com/304963 -TranslateMetricsTest.ReportContentLanguage -TranslateMetricsTest.ReportHtmlLang -TranslateMetricsTest.ReportLanguageDetectionTime -TranslateMetricsTest.ReportLanguageVerification -TranslateMetricsTest.ReportSimilarLanguageMatch diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt deleted file mode 100644 index c96da5b20b8..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest-tsan.txt +++ /dev/null @@ -1,2 +0,0 @@ -# http://crbug.com/159234. -WebContentsVideoCaptureDeviceTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt deleted file mode 100644 index 38c9f89741e..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Flaky, see http://crbug.com/227278 -WebContentsVideoCaptureDeviceTest.WebContentsDestroyed -CompositingIOSurfaceTransformerTest.* -# Flaky, see http://crbug.com/167299 -WebRTCAudioDeviceTest.StartPlayout diff --git a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt deleted file mode 100644 index f0c2f41df13..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/content_unittests.gtest_mac.txt +++ /dev/null @@ -1,58 +0,0 @@ -# http://crbug.com/93245 -GeolocationGatewayDataProviderCommonTest.* -GeolocationWifiDataProviderCommonTest.* - -# Flaky, see http://crbug.com/131154 -WebRTCAudioDeviceTest.FullDuplexAudioWithAGC - -# Flaky, see http://crbug.com/155284 -WebRTCAudioDeviceTest.StartRecording -WebRTCAudioDeviceTest.PlayLocalFile - -# Fail/crash, see http://crbug.com/151939 -WebDragDestTest.URL -WebDragDestTest.Data -WebDragSourceMacTest.DragInvalidlyEscapedBookmarklet - -# Fail, see http://crbug.com/153007 -MacSandboxTest.ClipboardAccess - -# mach_override assertion, see http://crbug.com/162728 -BlobURLRequestJobTest.* - -# Fail, see http://crbug.com/159234 -WebContentsVideoCaptureDeviceTest.GoesThroughAllTheMotions -WebContentsVideoCaptureDeviceTest.BadFramesGoodFrames - -# Hang at arbitrary point, can't tell where exactly, see http://crbug.com/163314 -RenderWidgetHostViewMacTest.* -WebContentsVideoCaptureDeviceTest.* -RenderViewHostTest.* -DeviceMotionEventPumpTest.* - -# Speculative disable of hanging tests. http://crbug.com/241919 -VideoCaptureControllerTest.* -VideoCaptureHostTest.* - -# Hangs under Valgrind, see http://crbug.com/244257 -SmoothScrollGestureControllerTest.Tick - -# http://crbug.com/247163 -VideoCaptureManagerTest.CloseWithoutStop -VideoCaptureManagerTest.CreateAndClose -VideoCaptureManagerTest.StartUsingId -WebRTCAudioDeviceTest.WebRtcPlayoutSetupTime -WebRTCAudioDeviceTest.WebRtcRecordingSetupTime - -# http://crbug.com/247601 -FontSerializationTest.StyledFonts -MacSandboxTest.FontLoadingTest -VideoCaptureManagerTest.ManipulateDeviceAndCheckCapabilities - -# http://crbug.com/280583 -DesktopCaptureDeviceTest.ScreenResolutionChangeVariableResolution -DesktopCaptureDeviceTest.Capture - -# http://crbug.com/303709 -GamepadProviderTest.PollingAccess -GamepadProviderTest.UserGesture diff --git a/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt deleted file mode 100644 index 3ed1f116532..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/crypto_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Too slow under TSan -RSAPrivateKeyUnitTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt deleted file mode 100644 index 6ae761f0a91..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/interactive_ui_tests.gtest.txt +++ /dev/null @@ -1,34 +0,0 @@ -# These test fail due to mmap Valgrind failures, see http://crbug.com/66677 -CollectedCookiesTest.DoubleDisplay -CollectedCookiesTest.NavigateAway -InfoBarsUITest.TestInfoBarsCloseOnNewTheme -FastShutdown.SlowTermination -MouseLeaveTest.TestOnMouseOut -NotificationsPermissionTest.TestNoUserGestureInfobar -NotificationsPermissionTest.TestUserGestureInfobar - -# These test fail due to timeout or limited buildslave support; -# http://crbug.com/67301 -BrowserFocusTest.InterstitialFocus -BrowserFocusTest.FindFocusTest -BrowserFocusTest.FocusTraversalOnInterstitial - -# Don't run FLAKY or FAILS tests under Valgrind and TSan -# as they tend to generate too many reports, see http://crbug.com/67959 -# NB: Can't use FAILS_/FLAKY_ as it will be turned into *.* by chrome_tests.py! -*.FLAKY* -*.FAILS* - -# Fails under Valgrind, see http://crbug.com/68068 -DevToolsSanityTest.TestPauseWhenScriptIsRunning - -# These tests time out under Valgrind, see http://crbug.com/163880 -BrowserFocusTest.FocusOnReload -CommandsApiTest.Basic -ExtensionApiTest.NotificationsHasPermissionManifest -ExtensionCrashRecoveryTest.ReloadTabsWithBackgroundPage -ExtensionCrashRecoveryTest.TwoExtensionsCrashBothAtOnce -ExtensionCrashRecoveryTest.TwoExtensionsCrashFirst -ExtensionCrashRecoveryTest.TwoExtensionsOneByOne -FullscreenControllerInteractiveTest.TestTabExitsMouseLockOnNavigation -OmniboxViewTest.Escape diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt deleted file mode 100644 index ac62a9a6e95..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,2 +0,0 @@ -# TODO(timurrrr): investigate -IPCSyncChannelTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt deleted file mode 100644 index f13b4d997c4..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest-tsan_win32.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Fails under TSan, see http://crbug.com/62511 -IPCSyncChannelTest.BadMessage diff --git a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt deleted file mode 100644 index 30a1f89323b..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/ipc_tests.gtest.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Takes 27-40 seconds to run. -IPCSyncChannelTest.ChattyServer -# Hangs on Linux sometimes. See http://crbug.com/22141 -IPCChannelTest.ChannelTest -# Crashes under Valgrind. See http://crbug.com/46782 -IPCSyncChannelTest.Multiple diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt deleted file mode 100644 index 315244542d3..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Hangs under Dr. Memory -# http://code.google.com/p/drmemory/issues/detail?id=978 -WinAudioTest.SyncSocketBasic -AudioBusTest.CopyTo diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt deleted file mode 100644 index ef4835c093f..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Win TSan disturbs ffmpeg's output, causing hash comparison assertion to fail. -# http://crbug.com/120396 -PipelineIntegrationTest.BasicPlaybackHashed diff --git a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt deleted file mode 100644 index b9954c25efb..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/media_unittests.gtest.txt +++ /dev/null @@ -1,6 +0,0 @@ -# This test tries to record fake audio in real-time. -# This appears to be too sensitive to slowdown, see http://crbug.com/49497 -FakeAudioInputTest.BasicCallbacks - -# Flaky under all Valgrind-based tools, see http://crbug.com/298771 -PipelineIntegrationTest.MediaSource_Opus_Seeking_WebM diff --git a/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt deleted file mode 100644 index 56bb83c0e39..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/message_center_unittests.gtest.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Fails http://crbug.com/256911 -MessageCenterImplTest.PopupTimersControllerResetTimer -MessageCenterImplTest.PopupTimersControllerStartMultipleTimersPause diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt deleted file mode 100644 index 46717dc3890..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win-xp.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://code.google.com/p/drmemory/issues/detail?id=842 -# Failing and then crashing. -HttpNetworkTransationSpdy21Test.HttpsProxySpdy* diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt deleted file mode 100644 index f0d641122c8..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,24 +0,0 @@ -# See http://crbug.com/82391 -URLRequestTestHTTP.HTTPSToHTTPRedirectNoRefererTest - -# Times out. See http://crbug.com/134313 -URLRequestTestHTTP.GetTest_ManyCookies - -# Dr. Memory hits an assertion: -# http://code.google.com/p/drmemory/issues/detail?id=422 -HttpAuthTest.* -HttpAuthHandlerFactoryTest.* -X509CertificateTest.* - -# Too many uninits and too slow. TODO(timurrrr): investigate uninits -ProxyResolverV8Test.* - -# Slow -CookieMonsterTest.GarbageCollectionTriggers - -# Hangs only when built in release mode. -# http://crbug.com/105762 -ClientSocketPoolBaseTest.DisableCleanupTimer - -# Flaky, see http://crbug.com/108422 -SSLClientSocketTest.ConnectMismatched diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt deleted file mode 100644 index 264a7fa8992..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-memcheck.txt +++ /dev/null @@ -1,26 +0,0 @@ -# These tests leak data intentionally, so are inappropriate for Valgrind tests. -# Similar list in ../purify/net_unittests.exe.gtest.txt -# TODO(dkegel): either merge the two files or keep them in sync, -# see http://code.google.com/p/chromium/issues/detail?id=8951 -DiskCacheBackendTest.AppCacheInvalidEntry -DiskCacheBackendTest.AppCacheInvalidEntryRead -DiskCacheBackendTest.AppCacheInvalidEntryWithLoad -DiskCacheBackendTest.InvalidEntry -DiskCacheBackendTest.InvalidEntryRead -DiskCacheBackendTest.InvalidEntryWithLoad -DiskCacheBackendTest.TrimInvalidEntry -DiskCacheBackendTest.TrimInvalidEntry2 -DiskCacheBackendTest.InvalidEntryEnumeration -DiskCacheBackendTest.NewEvictionInvalidEntry -DiskCacheBackendTest.NewEvictionInvalidEntryRead -DiskCacheBackendTest.NewEvictionInvalidEntryWithLoad -DiskCacheBackendTest.NewEvictionTrimInvalidEntry -DiskCacheBackendTest.NewEvictionTrimInvalidEntry2 -DiskCacheBackendTest.NewEvictionInvalidEntryEnumeration -DiskCacheBackendTest.ShutdownWithPendingCreate_Fast -DiskCacheBackendTest.ShutdownWithPendingFileIO_Fast -DiskCacheBackendTest.ShutdownWithPendingIO_Fast - -# flaky failure on Linux Tests (valgrind)(2), -# see http://code.google.com/p/chromium/issues/detail?id=117196 -SSLClientSocketTest.VerifyReturnChainProperlyOrdered diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt deleted file mode 100644 index 79c5afa8e08..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan.txt +++ /dev/null @@ -1,27 +0,0 @@ -# These huge tests are flaky and sometimes crash the following tests. -# See http://crbug.com/50346 -DiskCacheEntryTest.*HugeSparse* - -# SPDY tests tend to crash on both Mac and Windows. -# See http://crbug.com/51144 -Spdy/SpdyNetworkTransactionTest.SocketWriteReturnsZero* -# See http://crbug.com/50918 -Spdy/SpdyNetworkTransactionTest.CancelledTransactionSendRst* -# See http://crbug.com/51087 -Spdy* - -# See http://crbug.com/44570 -HttpNetworkTransactionTest.StopsReading204 -# See http://crbug.com/51145 -HttpNetworkTransactionTest.Incomplete100ThenEOF -HttpNetworkTransactionTest.UseAlternateProtocolForNpnSpdyWithExistingSpdySession -HttpNetworkTransactionTest.KeepAliveConnectionEOF - -# Crashes silently, see http://crbug.com/76911 -URLRequestTest.FileTest - -# http://crbug.com/92439 -ServerBoundCertServiceTest.* - -# Flaky, see http://crbug.com/259781 -EmbeddedTestServerTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt deleted file mode 100644 index e336298a00a..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,40 +0,0 @@ -# These tests fail due to unknown reasons -# TODO(timurrrr): investigate -CookieMonsterTest.TestLastAccess -SpdyNetwork*Error* -SpdyNetwork*Get* -SpdyNetworkTransactionTest.SynReplyHeadersVary -X509CertificateTest.UnoSoftCertParsing -URLRequestTest.DoNotSaveCookies -URLRequestTest.QuitTest - -# See http://crbug.com/47836 -ClientSocketPoolBaseTest.CancelPendingSocketAtSocketLimit - -# Single-threaded and relatively slow - no reason to test -# See http://crbug.com/59642 -CookieMonsterTest.GarbageCollectionTriggers - -# Time out, see http://crbug.com/68482 -SSLServerSocketTest.* - -# See http://crbug.com/102330 -SSLClientSocketTest.* - -# See http://crbug.com/104805 -HostResolverImplTest.AbortOnlyExistingRequestsOnIPAddressChange - -# Times out occasionally, http://crbug.com/124452 -HostResolverImplTest.StartWithinCallback - -# Crash. See crbug.com/234776. -DiskCacheEntryTest.EvictOldEntries -DiskCacheEntryTest.NewEvictionEvictOldEntries - -# Hang. crbug.com/265647. -NetworkChangeNotifierWinTest.NetChangeWinBasic -NetworkChangeNotifierWinTest.NetChangeWinSignal -NetworkChangeNotifierWinTest.NetChangeWinFailSignal* - - - diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt deleted file mode 100644 index ed064617792..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Very slow under Valgrind. -KeygenHandlerTest.*SmokeTest -KeygenHandlerTest.*ConcurrencyTest - -# Hangs, see http://crbug.com/61908 -DirectoryListerTest.BigDirRecursiveTest - -# http://crbug.com/88228 -SSLClientSocketTest.Connect -SSLClientSocketTest.ConnectClientAuthSendNullCert - -# These tests are broken http://crbug.com/118883 -*SpdyNetworkTransactionSpdy*Test.* -*SpdyHttpStreamSpdy*Test.* - -# Fails flakily. http://crbug.com/255775 -SimpleIndexFileTest.WriteThenLoadIndex - -# Flaky. http://crbug.com/237450 -DiskCacheBackendTest.SimpleCacheAppCacheOnlyDoomAll -DiskCacheBackendTest.SimpleCacheDoomAll diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt deleted file mode 100644 index a93d58871b0..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_linux.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Flaky. crbug.com/234776 -DiskCacheEntryTest.SimpleCacheStreamAccess -DiskCacheEntryTest.SimpleCacheGrowData -DiskCacheEntryTest.SimpleCacheSizeChanges - diff --git a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt deleted file mode 100644 index 6986bdfe874..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/net_unittests.gtest_mac.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Very slow under Valgrind, (see ). -KeygenHandlerTest.SmokeTest - -# These tests fail under Valgrind on Mac, see http://crbug.com/62314 -SSLClientSocketTest.* -HTTPSRequestTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt deleted file mode 100644 index 58a6a8da51d..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/printing_unittests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,3 +0,0 @@ -# CreateDC returns NULL, see http://crbug.com/73652 -PrintingContextTest.Base -PrintingContextTest.PrintAll diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt deleted file mode 100644 index 2b1ead484e9..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,9 +0,0 @@ -# This test fails on an assertion, see http://crbug.com/57266 -EncoderVp8Test.TestEncoder -DecoderVp8Test.EncodeAndDecode - -# These test intentionally generate exceptions to verify if a dump is generated -# during the crash. -BreakpadWinDeathTest.TestAccessViolation -BreakpadWinDeathTest.TestInvalidParameter -BreakpadWinDeathTest.TestDebugbreak diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt deleted file mode 100644 index d446a1df17b..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest-tsan_win32.txt +++ /dev/null @@ -1,2 +0,0 @@ -# These tests load mstscax.dll, which generates a bunch of race reports, see http://crbug.com/177832 -RdpClientTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt deleted file mode 100644 index c322014654a..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest.txt +++ /dev/null @@ -1,2 +0,0 @@ -# http://crbug.com/241856 -VideoSchedulerTest.StartAndStop diff --git a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt b/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt deleted file mode 100644 index eaf36f8f047..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/remoting_unittests.gtest_win-8.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Fails natively as well: http://crbug.com/251517 -RdpClientTest.Basic diff --git a/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt deleted file mode 100644 index 3afb727a320..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/safe_browsing_tests.gtest_mac.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Fails on Valgrind/Mac, see http://crbug.com/69280 -SafeBrowsingServiceTest.SafeBrowsingSystemTest diff --git a/chromium/tools/valgrind/gtest_exclude/suppressions.txt b/chromium/tools/valgrind/gtest_exclude/suppressions.txt deleted file mode 100644 index e8cc21038a2..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/suppressions.txt +++ /dev/null @@ -1,39 +0,0 @@ -{ - Test DiskCacheBackendTest.InvalidEntryEnumeration leaks. - Memcheck:Leak - fun:_Znwj - fun:_ZN10disk_cache12StorageBlockINS_12RankingsNodeEE12AllocateDataEv - fun:_ZN10disk_cache12StorageBlockINS_12RankingsNodeEE4LoadEv - fun:_ZN10disk_cache9EntryImpl15LoadNodeAddressEv - fun:_ZN10disk_cache11BackendImpl8NewEntryENS_4AddrEPPNS_9EntryImplEPb - fun:_ZN10disk_cache11BackendImpl10MatchEntryERKSsjb - fun:_ZN10disk_cache11BackendImpl9OpenEntryERKSsPPNS_5EntryE - fun:_ZN49DiskCacheBackendTest_InvalidEntryEnumeration_Test8TestBodyEv - fun:_ZN7testing4Test3RunEv -} -{ - Test DiskCacheBackendTest.InvalidEntryRead leaks. - Memcheck:Leak - fun:_Znwj - fun:_ZN10disk_cache11BackendImpl8NewEntryENS_4AddrEPPNS_9EntryImplEPb - fun:_ZN10disk_cache11BackendImpl10MatchEntryERKSsjb - fun:_ZN10disk_cache11BackendImpl9OpenEntryERKSsPPNS_5EntryE - fun:_ZN42DiskCacheBackendTest_InvalidEntryRead_Test8TestBodyEv - fun:_ZN7testing4Test3RunEv -} -{ - Test DiskCacheBackendTest.InvalidEntryWithLoad leaks. - Memcheck:Leak - fun:_Znwj - fun:_ZN10disk_cache11BackendImpl11CreateEntryERKSsPPNS_5EntryE - fun:_ZN46DiskCacheBackendTest_InvalidEntryWithLoad_Test8TestBodyEv - fun:_ZN7testing4Test3RunEv -} -{ - Test FlipNetworkTransactionTest.WriteError Bug 29004 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net26FlipNetworkTransactionTest17TransactionHelperERKNS_15HttpRequestInfoEPNS_17DelayedSocketDataE - fun:_ZN3net42FlipNetworkTransactionTest_WriteError_Test8TestBodyEv -} diff --git a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt b/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt deleted file mode 100644 index fc2cc8ec845..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-asan.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Flaky, see http://crbug.com/118370 -SyncSchedulerTest.TransientPollFailure diff --git a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt deleted file mode 100644 index 69768478008..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/sync_unit_tests.gtest-tsan.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Flaky, see http://crbug.com/118370 -SyncSchedulerTest.TransientPollFailure - -# Flaky, http://crbug.com/119467 -InvalidationNotifierTest.Basic diff --git a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt deleted file mode 100644 index 9474d9faa3e..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-memcheck.txt +++ /dev/null @@ -1,2 +0,0 @@ -# http://crbug.com/222606 -RenderTextTest.DisplayRectShowsCursorLTR diff --git a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt deleted file mode 100644 index 64383b7dcbf..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/ui_unittests.gtest-tsan.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Hangs under TSAN, see http://crbug.com/28332 -TextEliderTest.ElideTextLongStrings diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt deleted file mode 100644 index 2ef9d506eae..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win-xp.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Crashing (!) since forever, needs analysis. -BookmarkNodeDataTest.* - -# http://code.google.com/p/drmemory/issues/detail?id=842 -# Fails assertion. App data corrupted by DrMemory? -JsonSchemaTest.TestType -JsonSchemaTest.TestNumber diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt deleted file mode 100644 index aed475ca7d4..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-drmemory_win32.txt +++ /dev/null @@ -1,76 +0,0 @@ -################################################## -# known Dr. Memory bugs: - -# http://code.google.com/p/drmemory/issues/detail?id=318 -AudioRendererHostTest.* - -################################################## -# un-analyzed Dr. Memory bugs: - -# http://code.google.com/p/drmemory/issues/detail?id=548 -DownloadManagerTest.StartDownload - -# http://code.google.com/p/drmemory/issues/detail?id=979 -FirefoxProfileImporterTest.Firefox35Importer - -# http://code.google.com/p/drmemory/issues/detail?id=980 -MetricsLogManagerTest.* - -# http://code.google.com/p/drmemory/issues/detail?id=983 -ProfileShortcutManagerTest.* - -################################################## -# Chromium bugs: - -# times out on the bot -# http://crbug.com/87887 -VideoCaptureHostTest.* - -# crashes due to use-after-free's, http://crbug.com/90980 -FirefoxImporterTest.Firefox*NSS3Decryptor - -# fails http://crbug.com/92144 -ServiceProcessStateTest.ForceShutdown - -# fails sporadically: http://crbug.com/108205 -MultiProcessLockTest.RecursiveLock - -# Poor isolation, DCHECKs when no MessageLoop exists. Breaks when sharded. -# http://crbug.com/117679 -WebsiteSettingsModelTest.* - -# fails to create thread -# http://crbug.com/144087 -DesktopNotificationServiceTest.SettingsForSchemes -TemplateURLFetcherTest.* - -# times out on the bot. -# http://crbug.com/148644 -GAIAInfoUpdateServiceTest.* -ProfileManagerTest.* -ProfileInfoCacheTest.* - -# Failing on the bot. http://crbug.com/167014 -BrowserCommandControllerTest.AvatarMenuDisabledWhenOnlyOneProfile - -# Failing on the bot. http://crbug.com/168882 -UserCloudPolicyStoreTest.LoadWithInvalidFile -UserCloudPolicyStoreTest.LoadWithNoFile -UserCloudPolicyStoreTest.Store -UserCloudPolicyStoreTest.StoreThenClear -UserCloudPolicyStoreTest.StoreThenLoad -UserCloudPolicyStoreTest.StoreTwoTimes -UserCloudPolicyStoreTest.StoreValidationError - -# Failing on the bot. crbug.com/266972 -OneClickSigninBubbleViewTest.ShowBubble - -# http://crbug.com/292960 -SyncBackendHostTest.DownloadControlTypes -SyncBackendHostTest.SilentlyFailToDownloadControlTypes - -# DrM-i#1339: https://code.google.com/p/drmemory/issues/detail?id=1339 -ExtensionServiceTest.InstallTheme - -# http://crbug.com/302156 -TabStripModelTest.FastShutdown diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt deleted file mode 100644 index f4996dbb437..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-memcheck.txt +++ /dev/null @@ -1,19 +0,0 @@ -# Takes too long and may cause bots to time out. http://crbug.com/134400 -# This test alone takes 10-15 minutes. -Convolver.SIMDVerification - -# Timing issues. http://crbug.com/241051 -ExtensionAlarmsTest.* - -# SEGV_MAPERR. http://crbug.com/245797 -ClientSideDetectionHostTest.NavigationCancelsShouldClassifyUrl - -# Flaky. http://crbug.com/308309 -CloudPrintURLFetcherBasicTest.HandleRawData -CloudPrintURLFetcherOverloadTest.Protect - -# Hangs every once in a while. http://crbug.com/309149 -ExtensionUpdaterTest.TestMultipleManifestDownloading - -# Test fail: crbug.com/314216 -ExtensionIconManagerTest.LoadComponentExtensionResource diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt deleted file mode 100644 index ec8d751dad6..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest-tsan.txt +++ /dev/null @@ -1,12 +0,0 @@ -# This test has a possible data race detected by the TSAN bot -# see http://crbug.com/46840 -ProfileManagerTest.CreateAndUseTwoProfiles - -# Crashing - http://crbug.com/84536 -HttpBridgeTest.* - -# Takes too long and may cause TSAN bots to time out. http://crbug.com/134400 -Convolver.SIMDVerification - -# SEGV_MAPERR. http://crbug.com/245797 -ClientSideDetectionHostTest.NavigationCancelsShouldClassifyUrl diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt deleted file mode 100644 index 81bd7afb8bc..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest.txt +++ /dev/null @@ -1,34 +0,0 @@ -# Hangs sometimes; see http://crbug.com/22146 -VisitedLinkEventsTest.Coalescense -# Hangs sometimes; see http://crbug.com/22160 -VisitedLinkRelayTest.Basics -# Hangs (or takes forever?) reliably on bots; see http://crbug.com/23580 -RenderViewTest.ImeComposition -# Hangs sometimes; see http://crbug.com/52844 -PredictorTest.MassiveConcurrentLookupTest -# Pure virtual method called: see http://crbug.com/50950 -ConnectionTesterTest.RunAllTests - -# Following tests fail under valgrind because libjingle has hardcoded -# timeouts for P2P connections, and it makes these tests fail under valgrind. -# TODO(sergeyu): Remove hardcoded timeouts from libjingle. -P2PTransportImplTest.Create -P2PTransportImplTest.ConnectUdp -P2PTransportImplTest.ConnectTcp -P2PTransportImplTest.SendDataUdp -P2PTransportImplTest.SendDataTcp - -# Failing on CrOS, see http://crbug.com/79657 -SignedSettingsTest.StorePolicyNoPolicyData - -# Flaky and not very interesting under Valgrind http://crbug.com/93027 -ProcessWatcherTest.ImmediateTermination - -# Timing out all over the place. Disabling for now. http://crbug.com/149715 -ExtensionWebRequestTest.* -# Timing out all over the place. Disabling for now. http://crbug.com/149882 -NativeMessagingTest.* - -# Timing out all over the place. Disabling for now. http://crbug.com/164589 -StorageInfoProviderTest.* - diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt deleted file mode 100644 index 2c6334050b2..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_linux.txt +++ /dev/null @@ -1,31 +0,0 @@ -# Fails under Valgrind; see http://crbug.com/36770 -URLFetcherBadHTTPSTest.BadHTTPSTest -# Fails under Valgrind; see http://crbug.com/44552 -RenderViewTest.OnHandleKeyboardEvent -# http://crbug.com/88221 -ConnectionTesterTest.DeleteWhileInProgress -# Crash on CrOS, see http://crbug.com/115979 -ClientSideDetectionHostTest.OnPhishingDetectionDoneNotPhishing -ClientSideDetectionHostTest.OnPhishingDetectionDoneVerdictNotPhishing -ClientSideDetectionHostTest.OnPhishingDetectionDoneInvalidVerdict -ClientSideDetectionHostTest.OnPhishingDetectionDoneDisabled - -# http://crbug.com/119610 -ProfileSyncServiceSessionTest.WriteFilledSessionToNode -ProfileSyncServiceSessionTest.ValidTabs - -# http://crbug.com/139652 -BackgroundApplicationListModelTest.RandomTest - -# http://crbug.com/179427 -ExtensionPrefsDelayedInstallInfo.DelayedInstallInfo -ExtensionServiceTest.* - -# http://crbug.com/180335 -AutocompleteActionPredictorTest.RecommendActionURL - -# http://crbug.com/180467 -HttpPipeliningCompatibilityClientTest.* - -# http://crbug.com/238964 -CpuInfoProviderTest.* diff --git a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt b/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt deleted file mode 100644 index 589b6947ad8..00000000000 --- a/chromium/tools/valgrind/gtest_exclude/unit_tests.gtest_mac.txt +++ /dev/null @@ -1,39 +0,0 @@ -# Times out too often -# crbug.com/15817 -IPCSyncChannelTest.* -# Hangs -# http://crbug.com/21890 -WebDropTargetTest.URL -WebDropTargetTest.Data -# http://crbug.com/69037 -FirefoxImporterTest.Firefox3NSS3Decryptor -# http://crbug.com/69039 -ProcessInfoSnapshotMacTest.EffectiveVsRealUserIDTest - -# Following tests do not pass memcheck test. -# See http://crbug.com/30393. -NSMenuItemAdditionsTest.TestMOnDifferentLayouts - -# Hangs -# See http://crbug.com/75733 -BookmarkBarControllerTest.DeleteFromOffTheSideWhileItIsOpen -BookmarkBarControllerTest.HideWhenShowBookmarkBarTrueButDisabled -BookmarkBarControllerTest.HideWhenShowBookmarkBarFalse - -# Crashes, see http://crbug.com/86656 -MacSandboxTest.FileAccess - -# http://crbug.com/87769 -BalloonControllerTest.ShowAndCloseTest -BalloonControllerTest.SizesTest - -# http://crbug.com/89030 -ConnectionTesterTest.DeleteWhileInProgress - -# http://crbug.com/93245 -GeolocationWifiDataProviderCommonTest.* - -# http://crbug.com/96298 -FileSystemDirURLRequestJobTest.* -FileSystemURLRequestJobTest.* -FileSystemOperationWriteTest.* diff --git a/chromium/tools/valgrind/locate_valgrind.sh b/chromium/tools/valgrind/locate_valgrind.sh deleted file mode 100755 index 5d0a06be467..00000000000 --- a/chromium/tools/valgrind/locate_valgrind.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Prints a path to Valgrind binaries to be used for Chromium. -# Select the valgrind from third_party/valgrind by default, -# but allow users to override this default without editing scripts and -# without specifying a commandline option - -export THISDIR=`dirname $0` - -# User may use his own valgrind by giving its path with CHROME_VALGRIND env. -if [ "$CHROME_VALGRIND" = "" ] -then - # Guess which binaries we should use by uname - case "$(uname -a)" in - *Linux*x86_64*) - PLATFORM="linux_x64" - ;; - *Linux*86*) - PLATFORM="linux_x86" - ;; - *Darwin*9.[678].[01]*i386*) - # Didn't test other kernels. - PLATFORM="mac" - ;; - *Darwin*10.[0-9].[0-9]*i386*) - PLATFORM="mac_10.6" - ;; - *Darwin*10.[0-9].[0-9]*x86_64*) - PLATFORM="mac_10.6" - ;; - *Darwin*11.[0-9].[0-9]*x86_64*) - PLATFORM="mac_10.7" - ;; - *) - echo "Unknown platform:" >&2 - uname -a >&2 - echo "We'll try to search for valgrind binaries installed in /usr/local" >&2 - PLATFORM= - esac - - if [ "$PLATFORM" != "" ] - then - # The binaries should be in third_party/valgrind - # (checked out from deps/third_party/valgrind/binaries). - CHROME_VALGRIND="$THISDIR/../../third_party/valgrind/$PLATFORM" - - # TODO(timurrrr): readlink -f is not present on Mac... - if [ "$PLATFORM" != "mac" ] && \ - [ "$PLATFORM" != "mac_10.6" ] && \ - [ "$PLATFORM" != "mac_10.7" ] - then - # Get rid of all "../" dirs - CHROME_VALGRIND=`readlink -f $CHROME_VALGRIND` - fi - - if ! test -x $CHROME_VALGRIND/bin/valgrind - then - # We couldn't find the binaries in third_party/valgrind - CHROME_VALGRIND="" - fi - fi -fi - -if ! test -x $CHROME_VALGRIND/bin/valgrind -then - echo "Oops, could not find Valgrind binaries in your checkout." >&2 - echo "Please see" >&2 - echo " http://dev.chromium.org/developers/how-tos/using-valgrind/get-valgrind" >&2 - echo "for the instructions on how to download pre-built binaries." >&2 - exit 1 -fi - -echo $CHROME_VALGRIND diff --git a/chromium/tools/valgrind/memcheck/OWNERS b/chromium/tools/valgrind/memcheck/OWNERS deleted file mode 100644 index 72e8ffc0db8..00000000000 --- a/chromium/tools/valgrind/memcheck/OWNERS +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/chromium/tools/valgrind/memcheck/PRESUBMIT.py b/chromium/tools/valgrind/memcheck/PRESUBMIT.py deleted file mode 100644 index 512da0b3467..00000000000 --- a/chromium/tools/valgrind/memcheck/PRESUBMIT.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -""" -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -for more details on the presubmit API built into gcl. -""" - -import re - -def CheckChange(input_api, output_api): - """Checks the memcheck suppressions files for bad data.""" - sup_regex = re.compile('suppressions.*\.txt$') - suppressions = {} - errors = [] - check_for_memcheck = False - # skip_next_line has 3 possible values: - # - False: don't skip the next line. - # - 'skip_suppression_name': the next line is a suppression name, skip. - # - 'skip_param': the next line is a system call parameter error, skip. - skip_next_line = False - for f in filter(lambda x: sup_regex.search(x.LocalPath()), - input_api.AffectedFiles()): - for line, line_num in zip(f.NewContents(), - xrange(1, len(f.NewContents()) + 1)): - line = line.lstrip() - if line.startswith('#') or not line: - continue - - if skip_next_line: - if skip_next_line == 'skip_suppression_name': - if 'insert_a_suppression_name_here' in line: - errors.append('"insert_a_suppression_name_here" is not a valid ' - 'suppression name') - if suppressions.has_key(line): - if f.LocalPath() == suppressions[line][1]: - errors.append('suppression with name "%s" at %s line %s ' - 'has already been defined at line %s' % - (line, f.LocalPath(), line_num, - suppressions[line][1])) - else: - errors.append('suppression with name "%s" at %s line %s ' - 'has already been defined at %s line %s' % - (line, f.LocalPath(), line_num, - suppressions[line][0], suppressions[line][1])) - else: - suppressions[line] = (f, line_num) - check_for_memcheck = True; - skip_next_line = False - continue - if check_for_memcheck: - if not line.startswith('Memcheck:'): - errors.append('"%s" should be "Memcheck:..." in %s line %s' % - (line, f.LocalPath(), line_num)) - check_for_memcheck = False; - if line == '{': - skip_next_line = 'skip_suppression_name' - continue - if line == "Memcheck:Param": - skip_next_line = 'skip_param' - continue - - if (line.startswith('fun:') or line.startswith('obj:') or - line.startswith('Memcheck:') or line == '}' or - line == '...'): - continue - errors.append('"%s" is probably wrong: %s line %s' % (line, f.LocalPath(), - line_num)) - if errors: - return [output_api.PresubmitError('\n'.join(errors))] - return [] - -def CheckChangeOnUpload(input_api, output_api): - return CheckChange(input_api, output_api) - -def CheckChangeOnCommit(input_api, output_api): - return CheckChange(input_api, output_api) - -def GetPreferredTrySlaves(): - return ['linux_valgrind', 'mac_valgrind'] diff --git a/chromium/tools/valgrind/memcheck/suppressions.txt b/chromium/tools/valgrind/memcheck/suppressions.txt deleted file mode 100644 index 2e2c0f7b1f1..00000000000 --- a/chromium/tools/valgrind/memcheck/suppressions.txt +++ /dev/null @@ -1,6359 +0,0 @@ -# There are four kinds of suppressions in this file. -# 1. third party stuff we have no control over -# -# 2. intentional unit test errors, or stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing -# -# 3. Suppressions for real chromium bugs that are not yet fixed. -# These should all be in chromium's bug tracking system (but a few aren't yet). -# Periodically we should sweep this file and the bug tracker clean by -# running overnight and removing outdated bugs/suppressions. -#----------------------------------------------------------------------- - -# 1. third party stuff we have no control over -{ - Uninitialized value in deflate (Third Party) - Memcheck:Uninitialized - ... - fun:MOZ_Z_deflate -} -{ - #gtk developers don't like cleaning up one-time leaks. See http://mail.gnome.org/archives/gtk-devel-list/2004-April/msg00230.html - gtk_init_check leak (Third Party) - Memcheck:Leak - ... - fun:gtk_init_check -} -{ - Fontconfig leak? - Memcheck:Leak - ... - fun:XML_ParseBuffer - fun:FcConfigParseAndLoad -} -{ - bug_9245_FcConfigAppFontAddFile_leak - Memcheck:Leak - ... - fun:FcConfigAppFontAddFile -} -{ - pango_font_leak_todo_3 - Memcheck:Leak - ... - fun:FcFontRenderPrepare - ... - fun:pango_itemize_with_base_dir -} -{ - pango_font_leak_todo_4 - Memcheck:Leak - ... - fun:FcFontRenderPrepare - ... - fun:pango_ot_buffer_output -} -{ - pango_font_leak_todo_5 - Memcheck:Leak - ... - fun:FcFontRenderPrepare - ... - fun:pango_context_get_metrics -} -{ - pango_font_leak_todo_6 - Memcheck:Leak - ... - fun:FcDefaultSubstitute - ... - fun:pango_itemize_with_base_dir -} -{ - # Similar to fontconfig_bug_8428 below. Reported in - # https://bugs.freedesktop.org/show_bug.cgi?id=8215 - fontconfig_bug_8215 - Memcheck:Leak - fun:malloc - fun:FcPatternObjectInsertElt - fun:FcPatternObjectAddWithBinding -} -{ - # Fontconfig leak, seen in shard 16 of 20 of ui_tests - # See https://bugs.freedesktop.org/show_bug.cgi?id=8428 - # and http://www.gnome.org/~johan/gtk.suppression - fontconfig_bug_8428 - Memcheck:Leak - ... - fun:realloc - fun:FcPatternObjectInsertElt - fun:FcPatternObjectAddWithBinding -} -{ - bug_18590 (Third Party) - Memcheck:Leak - ... - fun:malloc - fun:FcConfigValues - fun:FcConfigValues - ... - fun:FcConfigValues - fun:FcConfigValues -} -{ - dlopen leak on error. Chromium issues 268368,273385. See http://sourceware.org/bugzilla/show_bug.cgi?id=12878. - Memcheck:Leak - fun:calloc - fun:_dlerror_run - fun:dlopen@@GLIBC_2.2.5 -} -{ - bug_58730_libc.so_value8 (Third Party) - Memcheck:Uninitialized - obj:/lib/libc-2.11.1.so -} -# net::SniffXML() clearly tries to read < 8 bytes, but strncasecmp() reads 8. -{ - bug_58730_strncasecmp_uninit (Third Party) - Memcheck:Uninitialized - ... - fun:strncasecmp - fun:_ZN4base11strncasecmpEPKcS1_m - fun:_ZN3netL8SniffXMLEPKcmPbPSs -} -{ - bug_76386a (Third Party) - Memcheck:Leak - fun:_Znw* - fun:_ZNSs4_Rep9_S_createE*RKSaIcE - ... - fun:_ZNSsC1*KS* -} -{ - bug_76386b (Third Party) - Memcheck:Leak - fun:_Znw* - fun:_ZNSs4_Rep9_S_createE*RKSaIcE - fun:_ZNSs4_Rep8_M_cloneERKSaIcE* -} -{ - getpwuid_and_getgrouplist - Memcheck:Leak - fun:malloc - fun:nss_parse_service_list - fun:__nss_database_lookup - obj:* - ... - fun:get* -} - -# XRandRInfo object seems to be leaking inside XRRFindDisplay. This happens the -# first time it is called, no matter who the caller is. We have observed this -# problem with both XRRSelectInput and XRRQueryExtension. -{ - bug_119677 - Memcheck:Leak - fun:malloc - fun:XRRFindDisplay -} -{ - Ubuntu_Precise_Fontconfig_Optimized_Code - Memcheck:Unaddressable - fun:FcConfigFileExists -} -{ - Ubuntu_Precise_Itoa_Optimized_Code - Memcheck:Uninitialized - fun:_itoa_word - fun:vfprintf - fun:__vsnprintf_chk - fun:__snprintf_chk -} -{ - Ubuntu_Precise_Wcscmp_Optimized_Code_In_Tests - Memcheck:Uninitialized - fun:wcscmp - fun:_ZN7testing8internal6String17WideCStringEqualsEPKwS3_ -} - -#----------------------------------------------------------------------- -# 2. intentional unit test errors, or stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing - -# See tools/valgrind/memcheck_analyze.py before modifying sanity tests. -{ - Memcheck sanity test 01 (memory leak). - Memcheck:Leak - fun:_Zna* - fun:_ZN4base31ToolsSanityTest_MemoryLeak_Test8TestBodyEv -} -{ - Memcheck sanity test 02 (malloc/read left). - Memcheck:Unaddressable - fun:*ReadValueOutOfArrayBoundsLeft* - ... - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 03 (malloc/read right). - Memcheck:Unaddressable - fun:*ReadValueOutOfArrayBoundsRight* - ... - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 04 (malloc/write left). - Memcheck:Unaddressable - fun:*WriteValueOutOfArrayBoundsLeft* - ... - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 05 (malloc/write right). - Memcheck:Unaddressable - fun:*WriteValueOutOfArrayBoundsRight* - ... - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 06 (new/read left). - Memcheck:Unaddressable - fun:*ReadValueOutOfArrayBoundsLeft* - ... - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 07 (new/read right). - Memcheck:Unaddressable - fun:*ReadValueOutOfArrayBoundsRight* - ... - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 08 (new/write left). - Memcheck:Unaddressable - fun:*WriteValueOutOfArrayBoundsLeft* - ... - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 09 (new/write right). - Memcheck:Unaddressable - fun:*WriteValueOutOfArrayBoundsRight* - ... - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 10 (write after free). - Memcheck:Unaddressable - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 11 (write after delete). - Memcheck:Unaddressable - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 12 (array deleted without []). - Memcheck:Free - ... - fun:_ZN4base46ToolsSanityTest_ArrayDeletedWithoutBraces_Test8TestBodyEv -} -{ - Memcheck sanity test 13 (single element deleted with []). - Memcheck:Free - ... - fun:_ZN4base51ToolsSanityTest_SingleElementDeletedWithBraces_Test8TestBodyEv -} -{ - Memcheck sanity test 14 (malloc/read uninit). - Memcheck:Uninitialized - fun:*ReadUninitializedValue* - ... - fun:_ZN4base43ToolsSanityTest_AccessesToMallocMemory_Test8TestBodyEv -} -{ - Memcheck sanity test 15 (new/read uninit). - Memcheck:Uninitialized - fun:*ReadUninitializedValue* - ... - fun:_ZN4base40ToolsSanityTest_AccessesToNewMemory_Test8TestBodyEv -} -{ - bug_86301 This test explicitly verifies PostTaskAndReply leaks the task if the originating MessageLoop has been deleted. - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN4base12_GLOBAL__N_169MessageLoopProxyTest_PostTaskAndReply_DeadReplyLoopDoesNotDelete_Test8TestBodyEv -} -{ - # Non-joinable thread doesn't clean up all state on program exit - # very common in ui tests - bug_16096 (WontFix) - Memcheck:Leak - fun:_Znw* - fun:_ZNSs4_Rep9_S_createE*RKSaIcE - fun:_ZNSs4_Rep8_M_cloneERKSaIcE* - fun:_ZNSs7reserveE* - fun:_ZNSs6appendEPKc* - fun:*StringAppendV* - ... - fun:_ZN4base12StringPrintfEPKcz -} -{ - # According to dglazkov, these are one-time leaks and intentional. - # They may go away if the change to move these off the heap lands. - bug_17996 (Intentional) - Memcheck:Leak - ... - fun:_ZN7WebCore8SVGNames4initEv -} -{ - # This is an on demand initialization which is done and then intentionally - # kept around (not freed) while the process is running. - intentional_WebCore_XMLNames_init_leak - Memcheck:Leak - ... - fun:_ZN7WebCore8XMLNames4initEv -} -{ - # Intentionally leaking NSS to prevent shutdown crashes - bug_61585a (Intentional) - Memcheck:Leak - fun:calloc - ... - fun:error_get_my_stack -} -{ - FileStream::Context can leak through WorkerPool by design - Memcheck:Leak - fun:_Znw* - fun:_ZN3net10FileStreamC1EPNS_6NetLogE -} -{ - # Histograms are used on un-joined threads, and can't be deleted atexit. - Histograms via FactoryGet including Linear Custom Boolean and Basic - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN4base*Histogram10FactoryGet* -} -{ - Intentional leak for SampleMap (stores SparseHistogram counts). - Memcheck:Leak - ... - fun:_ZN4base9SampleMap10AccumulateEii - fun:_ZN4base15SparseHistogram3AddEi -} -{ - bug_73299 (Intentional) - Memcheck:Leak - fun:_Znw* - fun:_ZN7content17WorkerProcessHost20CreateMessageFiltersEi - fun:_ZN7content17WorkerProcessHost4InitEi - fun:_ZN7content17WorkerServiceImpl24CreateWorkerFromInstanceENS_17WorkerProcessHost14WorkerInstanceE - fun:_ZN7content17WorkerServiceImpl12CreateWorkerERK31ViewHostMsg_CreateWorker_ParamsiPNS_19WorkerMessageFilterEPNS_15ResourceContextERKNS_22WorkerStoragePartitionE - fun:_ZN7content19WorkerMessageFilter14OnCreateWorkerERK31ViewHostMsg_CreateWorker_ParamsPi -} -{ - bug_83345 (Needs_Annotation) - Memcheck:Leak - ... - fun:_ZN4base*23LeakyLazyInstanceTraits*NewEPv - fun:_ZN4base12LazyInstance*LeakyLazyInstanceTraits*PointerEv -} -{ - bug_87500_a (Intentional) - Memcheck:Leak - ... - fun:_ZN10disk_cache9BackendIO23ExecuteBackendOperationEv - fun:_ZN10disk_cache9BackendIO16ExecuteOperationEv -} -{ - bug_79322 (Intentional) - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN4base*StatisticsRecorderTest_*_Test8TestBodyEv -} -{ - # According to dglazkov, UA style sheets are intentionally leaked. - # As such, treat any leaks originating from parseUASheet as intentional. - bug_121729 (Intentional) - Memcheck:Leak - ... - fun:_ZN7WebCoreL12parseUASheetEPKcj -} -{ - bug_121729_b (Intentional) - Memcheck:Leak - ... - fun:_ZN7WebCoreL12parseUASheetERKN3WTF6StringE -} -{ - intentional_see_bug_156466 - Memcheck:Leak - fun:_Znw* - fun:_ZN3ash5ShellC1EPNS_13ShellDelegateE - fun:_ZN3ash5Shell14CreateInstanceEPNS_13ShellDelegateE -} -{ - intentional OOM in layout test: fast/js/string-replacement-outofmemory.html - Memcheck:Unaddressable - fun:_ZN7WebCoreL28reportFatalErrorInMainThreadEPKcS1_ - fun:_ZN2v88internal2V823FatalProcessOutOfMemoryEPKcb - ... - fun:_ZN7WebCore16HTMLScriptRunner36executePendingScriptAndDispatchEventERNS_13PendingScriptE -} - -# http://crbug.com/269278 causes really widespread, flaky leaks in -# value objects that own some memory. These suppressions will cover -# all such objects, even though it's possible to get real leaks that -# look the same way (e.g. by allocating such an object in an arena). -{ - bug_269278a - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4Bind*Callback*BindState* -} -{ - bug_269278b - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocator*allocate* - fun:_ZNSt12_Vector_base*_M_allocate* -} - - -#----------------------------------------------------------------------- -# 3. Suppressions for real chromium bugs that are not yet fixed. -# These should all be in chromium's bug tracking system (but a few aren't yet). - -{ - # Chromium flakily leaks tasks at shutdown, see - # http://crbug.com/6532 - # http://codereview.chromium.org/20067 - # http://codereview.chromium.org/42083 - # To reproduce, run ipc tests - # This is the -O0 case - # In Purify, they don't even try to free them anymore. - # For now, in Valgrind, we'll add suppressions to ignore these leaks. - bug_6532 - Memcheck:Leak - fun:_Znw* - fun:_Z17NewRunnableMethodIN3IPC12ChannelProxy7ContextEMS2_FvvEEP14CancelableTaskPT_T0_ -} -{ - # See http://crbug.com/6532 - # This is the -O1 case - bug_6532b - Memcheck:Leak - ... - fun:_ZN3IPC12ChannelProxy7Context14OnChannelErrorEv - fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi -} -{ - # webkit leak? See http://crbug.com/9503 - bug_9503 - Memcheck:Leak - ... - fun:_ZN19TestWebViewDelegate24UpdateSelectionClipboardEb -} -{ - # very common in ui tests - bug_16091 - Memcheck:Leak - ... - fun:_ZN4base11MessageLoop22AddDestructionObserverEPNS0_19DestructionObserverE - ... - fun:_ZN3IPC11SyncChannel11SyncContext15OnChannelOpenedEv -} -{ - # very common in ui tests - bug_16092 - Memcheck:Leak - fun:* - fun:_ZN4base11MessageLoopC1ENS0_4TypeE - fun:_ZN4base6Thread10ThreadMainEv -} -{ - # very common in ui tests - bug_16092b - Memcheck:Leak - ... - fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE17_M_initialize_mapE* - ... - fun:_ZN4base11MessageLoopC1ENS0_4TypeE -} -{ - # very common in ui tests - bug_16092c - Memcheck:Leak - ... - fun:_ZNSt14priority_queueIN11MessageLoop11PendingTaskESt6vectorIS1_SaIS1_EESt4lessIS1_EEC1ERKS6_RKS4_ - fun:_ZN4base11MessageLoopC1ENS0_4TypeE - fun:_ZN4base6Thread10ThreadMainEv -} -{ - # very common in ui tests, also seen in Linux Reliability - bug_16093 - Memcheck:Leak - ... - fun:getaddrinfo -} -{ - # very common in ui tests, also seen in Linux Reliability - bug_16095 - Memcheck:Leak - ... - fun:_ZN4base11MessageLoop21AddToDelayedWorkQueueERKN*PendingTaskE - fun:_ZN4base11MessageLoop6DoWorkEv -} -{ - bug_16128 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3IPC11SyncChannelC1E* - ... - fun:_ZN7content11ChildThread4InitEv -} -{ - bug_16326 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN11webkit_glue16WebURLLoaderImplC1Ev - fun:_ZN11webkit_glue16WebKitClientImpl15createURLLoaderEv - fun:_ZN7WebCore22ResourceHandleInternal5startEv -} -{ - bug_17291 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocE* - ... - fun:_ZN2v88internal8JSObject23SetPropertyWithCallbackEPNS0_6ObjectEPNS0_6StringES3_PS1_ -} -{ - # also bug 17979. It's a nest of leaks. - bug_17385 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3IPC12ChannelProxy7Context13CreateChannel*Channel4ModeE - fun:_ZN3IPC12ChannelProxy4Init* - ... - fun:_ZN3IPC11SyncChannel*Channel4Mode*Listener* -} -{ - bug_17540 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptor*FileDescriptorWatcherEPNS0_7WatcherE - fun:_ZN4base16MessageLoopForIO19WatchFileDescriptor*MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE - ... - fun:_ZN3IPC7Channel11ChannelImpl7ConnectEv - fun:_ZN3IPC7Channel7ConnectEv - fun:_ZN3IPC12ChannelProxy7Context15OnChannelOpenedEv -} -{ - bug_19196 - Memcheck:Leak - fun:_Znw* - fun:_ZN2v817RegisterExtensionEPNS_9ExtensionE - fun:_ZN7WebCore7V8Proxy23registerExtensionWithV8EPN2v89ExtensionE - fun:_ZN7WebCore7V8Proxy17registerExtensionEPN2v89ExtensionEi - fun:_ZN5blink17registerExtensionEPN2v89ExtensionEi - fun:_ZN12RenderThread23EnsureWebKitInitializedEv -} -{ - bug_19371 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE - fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE - fun:_ZN4base13WaitableEvent4WaitEv - fun:_ZN4base18MessagePumpDefault3RunEPNS_11MessagePump8DelegateE -} -{ - # slight variant of the above - bug_19371a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE - fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE - fun:_ZN4base18MessagePumpDefault3RunEPNS_11MessagePump8DelegateE -} -{ - bug_19377 - Memcheck:Leak - fun:calloc - ... - fun:event_base_new - fun:_ZN4base19MessagePumpLibeventC1Ev - fun:_ZN4base11MessageLoopC1ENS0_4TypeE - fun:_ZN4base6Thread10ThreadMainEv -} -{ - bug_19463 - Memcheck:Leak - ... - fun:_ZN4base19MessagePumpLibevent4InitEv - fun:_ZN4base19MessagePumpLibeventC1Ev - fun:_ZN4base11MessageLoopC1ENS0_4TypeE -} -{ - bug_19775_a - Memcheck:Leak - ... - fun:malloc - fun:sqlite3MemMalloc - fun:mallocWithAlarm - fun:sqlite3Malloc - ... - fun:sqlite3VdbeExec - fun:sqlite3Step - fun:sqlite3_step - fun:sqlite3_exec - fun:_ZN3sql10Connection7Execute* - ... - fun:_ZN7history*Database*Create* -} -{ - bug_19775_c - Memcheck:Leak - ... - fun:openDatabase - fun:sqlite3_open - fun:_ZN3sql10Connection12OpenInternalERKSs -} -{ - bug_19775_g - Memcheck:Leak - fun:malloc - fun:sqlite3MemMalloc - fun:mallocWithAlarm - fun:sqlite3Malloc - fun:sqlite3ParserAlloc - fun:sqlite3RunParser - fun:sqlite3Prepare - fun:sqlite3LockAndPrepare - fun:sqlite3_prepare* -} -{ - bug_19775_h - Memcheck:Leak - ... - fun:malloc - fun:sqlite3MemMalloc - fun:mallocWithAlarm - fun:sqlite3Malloc - ... - fun:yy_reduce -} -# IPCing uninitialized data -{ - bug_20997_a - Memcheck:Param - socketcall.sendmsg(msg.msg_iov[i]) - fun:sendmsg* - fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE -} -{ - bug_20997_b - Memcheck:Param - socketcall.sendmsg(msg.msg_iov[i]) - fun:sendmsg$UNIX2003 - ... - fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_ - ... - fun:event_process_active - fun:event_base_loop -} -{ - bug_22098 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptorEibNS0_4ModeEPNS0_21FileDescriptorWatcherEPNS0_7WatcherE - fun:_ZN4base16MessageLoopForIO19WatchFileDescriptorEibNS_4ModeEPN4base19MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE - fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv - fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE - fun:_ZN3IPC7Channel4SendEPNS_7MessageE - fun:_ZN3IPC12ChannelProxy7Context13OnSendMessageEPNS_7MessageE - fun:_ZN3IPC8SendTask3RunEv -} -{ - bug_22923 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN13WorkerService12CreateWorker* - fun:_ZN19RenderMessageFilter14OnCreateWorker* -} -{ - bug_27665 - Memcheck:Leak - fun:_Znw* - fun:_ZN10SkXfermode6CreateENS_4ModeE - fun:_ZN7SkPaint15setXfermodeModeEN10SkXfermode4ModeE - fun:_ZNK7WebCore19PlatformContextSkia16setupPaintCommonEP7SkPaint - fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceE - fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceENS_17CompositeOperatorE -} -# The following three suppressions are related to the workers code. -{ - bug_27837 - Memcheck:Leak - fun:_Znw* - fun:_ZN19WebSharedWorkerStub9OnConnectEii -} -{ - # GTK tooltip doesn't always initialize variables. - # https://bugzilla.gnome.org/show_bug.cgi?id=554686 - tooltip_554686 - Memcheck:Uninitialized - fun:child_location_foreach - fun:gtk_fixed_forall - ... - fun:find_widget_under_pointer - fun:gtk_tooltip_show_tooltip - fun:tooltip_popup_timeout - fun:gdk_threads_dispatch - fun:g_timeout_dispatch -} -{ - bug_29675 - Memcheck:Leak - fun:_Znw* - fun:_ZN27ChromeBrowserMainPartsPosix24PostMainMessageLoopStartEv - fun:_ZN7content15BrowserMainLoop20MainMessageLoopStartEv - fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE - fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE - fun:ChromeMain -} -{ - bug_30346 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN13TCMallocGuardC1Ev - fun:_Z41__static_initialization_and_destruction_0ii - fun:_GLOBAL__I__ZN61FLAG__namespace_do_not_use_directly_use_DECLARE_int64_instead43FLAGS_tcmalloc_large_alloc_report_thresholdE -} -{ - bug_30346b - Memcheck:Unaddressable - ... - fun:_ZSt22__get_temporary_bufferIPN7WebCore11RenderLayerEESt4pairIPT_iEiS5_ - fun:_ZNSt17_Temporary_bufferIPPN7WebCore11RenderLayerES2_EC1ES3_S3_ - fun:_ZN7WebCore11RenderLayer17updateZOrderListsEv - fun:_ZN7WebCore11RenderLayer24updateLayerListsIfNeededEv - fun:_ZN7WebCore11RenderLayer38updateCompositingAndLayerListsIfNeededEv -} -{ - bug_30703a - Memcheck:Param - write(buf) - ... - fun:zipCloseFileInZipRaw - fun:zipCloseFileInZip - fun:_Z*13AddEntryToZip* -} -{ - bug_30703b - Memcheck:Uninitialized - fun:deflate - ... - fun:zipCloseFileInZipRaw - fun:zipCloseFileInZip - fun:_Z*13AddEntryToZip* -} -{ - bug_30704a - Memcheck:Uninitialized - fun:crc32 - ... - fun:png_write_row -} -{ - bug_30704b - Memcheck:Param - write(buf) - ... - fun:_ZN26SandboxedUnpacker17RewriteImageFilesEv -} -{ - bug_30704c - Memcheck:Param - write(buf) - ... - fun:_ZNK16BrowserThemePack11WriteToDiskE* -} -{ - bug_30704d - Memcheck:Uninitialized - ... - fun:png_process_data - fun:_ZN7WebCore14PNGImageReader6decodeERKNS_12SharedBufferEb - fun:_ZN7WebCore15PNGImageDecoder6decodeEb - fun:_ZN7WebCore15PNGImageDecoder18frameBufferAtIndexEm -} -{ - bug_30704e - Memcheck:Uninitialized - obj:*/libpng* - fun:png_write_row -} -{ - bug_30704f - Memcheck:Uninitialized - ... - fun:wk_png_write_find_filter - fun:wk_png_write_row -} -{ - bug_30704g - Memcheck:Param - write(buf) - obj:*libpthread* - fun:_ZN9file_util19WriteFileDescriptorE* - fun:_ZN9file_util9WriteFileE* - fun:*SaveScreenshotInternalE*4base8Callback* - fun:*SaveScreenshotE*4base8Callback* -} -{ - bug_87232 - Memcheck:Uninitialized - fun:_ZN7WebCore12base64EncodeEPKcjRN3WTF6VectorIcLj0EEEb - fun:_ZN7WebCore12base64EncodeERKN3WTF6VectorIcLj0EEERS2_b - fun:_ZN7WebCore*14ImageToDataURL*SkBitmapEEN3WTF6StringERT_* -} -{ - bug_31985 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net16HttpNetworkLayer10GetSessionEv - fun:_ZN3net16HttpNetworkLayer17CreateTransactionEP10scoped_ptrINS_15HttpTransactionEE - fun:_ZN3net9HttpCache11Transaction13DoSendRequestEv - fun:_ZN3net9HttpCache11Transaction6DoLoopEi -} -{ - bug_32085 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIN7content21NotificationRegistrar6RecordEE8allocate* - fun:_ZNSt12_Vector_baseIN7content21NotificationRegistrar6RecordESaIS* - fun:_ZNSt6vectorIN7content21NotificationRegistrar6RecordESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S* - fun:_ZNSt6vectorIN7content21NotificationRegistrar6RecordESaIS* - fun:_ZN7content21NotificationRegistrar3Add* -} -{ - bug_32273_a - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC12ChannelProxy4SendEPNS_7MessageE - fun:_ZN3IPC11SyncChannel15SendWithTimeoutEPNS_7MessageEi - fun:_ZN3IPC11SyncChannel4SendEPNS_7MessageE - fun:_ZN11ChildThread4SendEPN3IPC7MessageE - fun:_ZN12RenderThread4SendEPN3IPC7MessageE - fun:_ZN12RenderWidget4SendEPN3IPC7MessageE - fun:_ZN12RenderWidget16DoDeferredUpdateEv - fun:_ZN12RenderWidget20CallDoDeferredUpdateEv -} -{ - bug_32273_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN24BrowserRenderProcessHost4SendEPN3IPC7MessageE - fun:_ZN16RenderWidgetHost4SendEPN3IPC7MessageE -} -{ - bug_32623 - Memcheck:Leak - ... - fun:ssl3_HandleHandshakeMessage - fun:ssl3_HandleHandshake - fun:ssl3_HandleRecord - fun:ssl3_GatherCompleteHandshake - fun:SSL_ForceHandshake - fun:_ZN3net18SSLClientSocketNSS4Core11DoHandshakeEv -} -{ - bug_32624_b - Memcheck:Leak - fun:malloc - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - obj:* - fun:secmod_ModuleInit -} -{ - bug_32624_c - Memcheck:Leak - ... - fun:malloc - ... - fun:PORT_Alloc_Util - ... - fun:PK11_InitPin -} -{ - bug_32624_f - Memcheck:Leak - ... - fun:CERT_PKIXVerifyCert - fun:_ZN3net12_GLOBAL__N_114PKIXVerifyCertE* -} -{ - bug_32624_g - Memcheck:Leak - ... - fun:CERT_VerifySignedData - fun:cert_VerifyCertChain - fun:CERT_VerifyCertChain - fun:CERT_VerifyCert -} -{ - bug_38138 - Memcheck:Param - write(buf) - obj:*libpthread* - fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv - ... - fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE - fun:_ZN4base11MessageLoop11RunInternalEv - fun:_ZN4base11MessageLoop10RunHandlerEv -} -{ - bug_30633_39325 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN11ProfileImpl17GetRequestContextEv - fun:_ZN19SafeBrowsingService5StartEv - fun:_ZN19SafeBrowsingService10InitializeEv - fun:_ZN22ResourceDispatcherHost10InitializeEv - fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv - fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv - fun:_ZN16ExtensionService4InitEv -} -{ - bug_42842 - Memcheck:Leak - fun:_Znw* - fun:_ZN19TestWebViewDelegate12createWorkerEPN5blink8WebFrameEPNS0_15WebWorkerClientE - fun:_ZN5blink19WebWorkerClientImpl24createWorkerContextProxyEPN7WebCore6WorkerE - fun:_ZN7WebCore18WorkerContextProxy6createEPNS_6WorkerE - fun:_ZN7WebCore6WorkerC1EPNS_22ScriptExecutionContextE - fun:_ZN7WebCore6Worker6createERKN3WTF6StringEPNS_22ScriptExecutionContextERi - fun:_ZN7WebCore8V8Worker19constructorCallbackERKN2v89ArgumentsE -} -{ - bug_42942_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc - fun:_ZN3sql9MetaTable19PrepareGetStatementEPNS_9StatementEPKc - fun:_ZN3sql9MetaTable8GetValueEPKcPi - fun:_ZN3sql9MetaTable26GetCompatibleVersionNumberEv - ... - fun:_ZN3net13CookieMonster9InitStoreEv -} -{ - bug_42942_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc - fun:_ZN3sql9MetaTable19PrepareSetStatementEPNS_9StatementEPKc - fun:_ZN3sql9MetaTable8SetValueEPKci - fun:_ZN3sql9MetaTable16SetVersionNumberEi - ... - fun:_ZN3net13CookieMonster9InitStoreEv -} -{ - bug_42958_a - Memcheck:Leak - fun:malloc - ... - fun:_NPN_RegisterObject - fun:_ZN7WebCore16ScriptController20windowScriptNPObjectEv - fun:_ZNK6WebKit12WebFrameImpl12windowObjectEv - fun:_ZN6webkit5npapi13WebPluginImpl23GetWindowScriptNPObjectEv - fun:NPN_GetValue -} -{ - bug_42958_b - Memcheck:Leak - fun:malloc - ... - fun:_NPN_RegisterObject - fun:_ZN7WebCore25createV8ObjectForNPObjectEP8NPObjectS1_ - fun:_ZN7WebCore16ScriptController18bindToWindowObjectEPNS_5FrameERKN3WTF6StringEP8NPObject - fun:_ZN5blink12WebFrameImpl18bindToWindowObjectERKNS_9WebStringEP8NPObject - fun:_ZN13CppBoundClass16bindToJavascriptEPN5blink8WebFrameERKNS0_9WebStringE -} -{ - bug_42958_c - Memcheck:Leak - fun:malloc - ... - fun:_NPN_RegisterObject - fun:_ZN7WebCore25createV8ObjectForNPObjectEP8NPObjectS1_ - fun:_ZN7WebCore16ScriptController29createScriptInstanceForWidgetEPNS_6WidgetE - fun:_ZN*7WebCore17HTMLPlugInElement11getInstanceEv -} -{ - bug_43471 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIPN4base11MessageLoop19DestructionObserverEE8allocateE* - fun:_ZNSt12_Vector_baseIPN4base11MessageLoop19DestructionObserverESaIS* - fun:_ZNSt6vectorIPN4base11MessageLoop19DestructionObserverESaIS* - fun:_ZNSt6vectorIPN4base11MessageLoop19DestructionObserverESaIS* - fun:_ZN16ObserverListBaseIN4base11MessageLoop19DestructionObserverEE11AddObserverEPS* - fun:_ZN4base11MessageLoop22AddDestructionObserverEPNS0_19DestructionObserverE -} -{ - bug_46250 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIPN11MessageLoop12TaskObserverEE8allocateEjPKv - fun:_ZNSt12_Vector_baseIPN11MessageLoop12TaskObserverESaIS2_EE11_M_allocateEj - fun:_ZNSt6vectorIPN11MessageLoop12TaskObserverESaIS2_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS2_S4_EERKS2_ - fun:_ZNSt6vectorIPN11MessageLoop12TaskObserverESaIS2_EE9push_backERKS2_ - fun:_ZN16ObserverListBaseIN11MessageLoop12TaskObserverEE11AddObserverEPS1_ - fun:_ZN4base11MessageLoop15AddTaskObserverEPNS_12TaskObserverE - fun:*IOJankObserver21AttachToCurrentThreadEv -} -{ - bug_47950 - Memcheck:Leak - fun:_Znw* - ... - fun:*CreateSpdyHeadersFromHttpRequestERKN3net15HttpRequestInfoEPSt3mapISsSsSt4lessISsESaISt4pairIKSsSsEEE -} -{ - bug_49279_a - Memcheck:Leak - fun:_Znw* - fun:*ChromeCookieMonsterDelegateC1EP7Profile - fun:_ZN30ChromeURLRequestContextFactoryC2EP7Profile -} -{ - bug_49279_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN29ChromeURLRequestContextGetter28CreateRequestContextForMediaE* - fun:_ZN29ChromeURLRequestContextGetter22CreateOriginalForMediaE* - fun:_ZN11ProfileImpl25GetRequestContextForMediaEv -} -{ - bug_49279_c - Memcheck:Leak - fun:_Znw* - fun:*ChromeCookieMonsterDelegateC2EP7Profile - fun:*ChromeCookieMonsterDelegateC1EP7Profile - fun:_ZN30ChromeURLRequestContextFactoryC2EP7Profile -} -{ - bug_50304 - Memcheck:Leak - ... - fun:_ZN7history14HistoryBackend8InitImpl* - fun:_ZN7history14HistoryBackend4Init* -} -{ - bug_50936 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN23OffTheRecordProfileImpl4InitEv - fun:_ZN7Profile25CreateOffTheRecordProfileEv - fun:_ZN11ProfileImpl22GetOffTheRecordProfileEv -} -{ - bug_50968_a - Memcheck:Leak - ... - fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv -} -{ - bug_50968_b - Memcheck:Unaddressable - ... - fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv -} -{ - bug_50968_d - Memcheck:Uninitialized - ... - fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv -} -{ - bug_56359_a - Memcheck:Leak - fun:_Znw* - fun:_ZN3net9HttpCache24GetBackendForTransactionEPNS0_11TransactionE - fun:_ZN3net9HttpCache11Transaction12DoGetBackendEv - fun:_ZN3net9HttpCache11Transaction6DoLoopEi - fun:_ZN3net9HttpCache11Transaction5StartEPKNS_15HttpRequestInfoEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE - fun:_ZN17URLRequestHttpJob16StartTransactionEv - fun:_ZN17URLRequestHttpJob24OnCanGetCookiesCompletedEi - fun:_ZN17URLRequestHttpJob23AddCookieHeaderAndStartEv - fun:_ZN17URLRequestHttpJob5StartEv - fun:_ZN10URLRequest8StartJobEP13URLRequestJob - fun:_ZN10URLRequest5StartEv - fun:_ZN10URLFetcher4Core15StartURLRequestEv -} -{ - bug_51153 - Memcheck:Leak - ... - fun:_ZN7history14HistoryBackend16GetFaviconForURLE13scoped_refptrI17CancelableRequestI14CallbackRunnerI6Tuple5IibS1_I16RefCountedMemoryEb4GURLEEEERKS7_ -} -{ - bug_51379 - Memcheck:Leak - fun:malloc - ... - obj:/usr/lib/libpangocairo-1.0.so.0.2002.3 - ... - fun:_ZN3gfx10Canvas13DrawStringIntERKSbIwSt11char_traitsIwESaIwEERKNS_4FontERKjiiiii - fun:_ZN3gfx10Canvas13DrawStringIntERKSbIwSt11char_traitsIwESaIwEERKNS_4FontERKjiiii -} -{ - bug_51590a - Memcheck:Unaddressable - ... - fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv - fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv -} -{ - bug_51590b - Memcheck:Unaddressable - ... - fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv - fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv -} -{ - bug_51590c - Memcheck:Unaddressable - ... - fun:_ZN7WebCore13TextRunWalker13nextScriptRunEv - fun:_ZN7WebCore13TextRunWalker14widthOfFullRunEv -} -{ - bug_51679 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN23MessageService16AddEventListenerERKSsi - fun:_ZN24BrowserRenderProcessHost22OnExtensionAddListenerERKSs -} -{ - bug_52831 - Memcheck:Leak - fun:_Znw* - ... - fun:*InotifyReaderTask3RunEv - ... - fun:_ZN4base11MessageLoop11RunInternalEv - fun:_ZN4base11MessageLoop10RunHandlerEv -} -{ - bug_52837 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNSt3map*FilePath*insert* - fun:_ZNSt3map*FilePath*ix* - fun:_ZN16ExtensionService15UnloadExtensionERKSs - fun:_ZN16ExtensionService18UninstallExtensionERKSsb - fun:_ZN18AutomationProvider18UninstallExtensionEiPb -} -{ - bug_52957 - Memcheck:Unaddressable - fun:glGetString - fun:_ZN18gpu_info_collector19CollectGraphicsInfoER7GPUInfo - fun:_ZN9GpuThread18OnEstablishChannelEi -} -{ - bug_54308 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNK8chromeos25CrosSettingsProviderProxy3GetERKSsPP5Value - fun:_ZNK8chromeos12CrosSettings3GetERKSsPP5Value - fun:_ZN8chromeos26CoreChromeOSOptionsHandler9FetchPrefERKSs - fun:_ZN18CoreOptionsHandler16HandleFetchPrefsEPK9ListValue -} -{ - bug_55533 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN5IDMapIN3IPC7Channel8ListenerEL23IDMapOwnershipSemantics* - fun:_ZN17RenderProcessHost*Profile - fun:_ZN21MockRenderProcessHost*Profile -} -{ - bug_56676 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIN4base15file_util_proxy5EntryEE8allocate* - fun:_ZNSt12_Vector_baseIN4base15file_util_proxy5EntryESaIS2_EE11_M_allocate* - fun:_ZNSt6vectorIN4base15file_util_proxy5EntryESaIS2_EE20_M_allocate_and_copyIN9__gnu_cxx17__normal_iteratorIPKS2* - fun:_ZNSt6vectorIN4base15file_util_proxy5EntryESaIS2_EEaSERKS4_ - fun:_ZN14MockDispatcher16DidReadDirectoryERKSt6vectorIN4base15file_util_proxy5EntryESaIS3_EEb - fun:_ZN7fileapi19FileSystemOperation16DidReadDirectoryEN4base17PlatformFileErrorERKSt6vectorINS1_15file_util_proxy5EntryESaIS5_EE -} -{ - bug_58321 - Memcheck:Unaddressable - fun:_ZNK3WTF6RefPtrIN7WebCore5FrameEE3getEv - fun:_ZN7WebCore14ResourceLoader18didReceiveResponseEPNS_14ResourceHandleERKNS_16ResourceResponseE - fun:_ZN7WebCore22ResourceHandleInternal18didReceiveResponseEPN5blink12WebURLLoaderERKNS1_14WebURLResponseE - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnReceivedResponseERKNS_20ResourceLoaderBridge12ResponseInfoEb - fun:_ZN85_GLOBAL__N_webkit_tools_test_shell_simple_resource_loader_bridge.cc_00000000_*12RequestProxy22NotifyReceivedResponseERKN11webkit_glue20ResourceLoaderBridge12ResponseInfoEb -} -{ - bug_58340 - Memcheck:Unaddressable - fun:_ZNK3WTF6RefPtrIN7WebCore5FrameEE3getEv - fun:_ZN7WebCore14ResourceLoader18didReceiveResponseEPNS_14ResourceHandleERKNS_16ResourceResponseE - fun:_ZN7WebCore22ResourceHandleInternal18didReceiveResponseEPN5blink12WebURLLoaderERKNS1_14WebURLResponseE - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnReceivedResponseERKNS_20ResourceResponseInfoEb -} -{ - bug_58546 - Memcheck:Leak - fun:_Znw* - fun:_ZN27SSLConfigServiceManagerPrefC1EP7Profile - fun:_ZN23SSLConfigServiceManager20CreateDefaultManagerEP7Profile - fun:_ZN11ProfileImplC1E* - fun:_ZN7Profile13CreateProfileE* - fun:_ZN14ProfileManager13CreateProfileE* - fun:_ZN14ProfileManager10GetProfileE* - fun:_ZN14ProfileManager17GetDefaultProfileE* - fun:_ZN14ProfileManager17GetDefaultProfileEv -} -{ - bug_58561 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net8internal26ClientSocketPoolBaseHelper16GetOrCreateGroupERKSs - fun:_ZN3net8internal26ClientSocketPoolBaseHelper13RequestSocketERKSsPKNS1_7RequestE - fun:_ZN3net20ClientSocketPoolBaseINS_* - fun:_ZN3net*SocketPool13RequestSocketE* - fun:_ZN3net18ClientSocketHandle4InitINS_* - ... - fun:_ZN3net21HttpStreamFactoryImpl3Job16DoInitConnectionEv - fun:_ZN3net21HttpStreamFactoryImpl3Job6DoLoopEi -} -{ - bug_58564 - Memcheck:Leak - fun:calloc - ... - fun:SSL_ImportFD - fun:_ZN3net18SSLClientSocketNSS20InitializeSSLOptionsEv - fun:_ZN3net18SSLClientSocketNSS7ConnectEP14CallbackRunnerI6Tuple1IiEE - fun:_ZN3net13SSLConnectJob12DoSSLConnectEv - fun:_ZN3net13SSLConnectJob6DoLoopEi -} -{ - bug_58574 - Memcheck:Unaddressable - ... - fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEE - fun:_ZN3net12CertVerifier7Request8DoVerifyEv -} -{ - bug_60556a - Memcheck:Unaddressable - ... - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc - fun:_ZN11WebDatabase* -} -{ - bug_60556b - Memcheck:Unaddressable - ... - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc - fun:_ZN11WebDatabase* -} -{ - bug_60556c - Memcheck:Unaddressable - ... - fun:sqlite3_step - fun:_ZN3sql9Statement3RunEv - fun:_ZN3sql10Connection17CommitTransactionEv - fun:_ZN3sql11Transaction6CommitEv - fun:_ZN11WebDatabase* -} -{ - bug_60556d - Memcheck:Unaddressable - ... - fun:sqlite3_step - fun:_ZN3sql9Statement3RunEv - fun:_ZN3sql10Connection17CommitTransactionEv - fun:_ZN3sql11Transaction6CommitEv - fun:_ZN11WebDatabase* -} -{ - bug_60556e - Memcheck:Param - read(buf) - ... - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc - fun:_ZN11WebDatabase* -} -{ - bug_60556f - Memcheck:Unaddressable - ... - fun:sqlite3_close - fun:_ZN3sql10Connection5CloseEv - fun:_ZN3sql10ConnectionD2Ev - fun:_ZN3sql10ConnectionD1Ev - fun:_ZN11WebDatabase* -} -{ - bug_60556g - Memcheck:Unaddressable - ... - fun:sqlite3_step - fun:_ZN3sql9Statement4StepEv - fun:_ZN7history11URLDatabase12GetRowForURLERK4GURLPNS_6URLRowE - fun:_ZN7history14HistoryBackend12AddPageVisitERK4GURLN4base4TimeExjNS_11VisitSourceE -} -{ - bug_60654 - Memcheck:Uninitialized - fun:_ZN7WebCore25GraphicsContext3DInternal7reshapeEii - fun:_ZN7WebCore17GraphicsContext3D7reshapeEii - fun:_ZN7WebCore21WebGLRenderingContextC1EPNS_17HTMLCanvasElementEN3WTF10PassRefPtrINS_17GraphicsContext3DEEE - fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE - fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE - ... - fun:_ZN2v88internal6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPPPS4_Pb -} -{ - bug_60667c - Memcheck:Leak - ... - obj:* - fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj - fun:_ZN3gpu5gles216GLES2DecoderImpl19HandleCompileShaderEjRKNS0_13CompileShaderE - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv -} -{ - bug_64887_a - Memcheck:Uninitialized - fun:_itoa_word - fun:vfprintf - fun:vsnprintf - fun:snprintf - fun:_ZN7testing*26PrintByteSegmentInObjectToEPKhmmPSo - fun:_ZN7testing*24PrintBytesInObjectToImplEPKhmPSo - fun:_ZN7testing9internal220PrintBytesInObjectToEPKhmPSo - fun:_ZN7testing9internal220TypeWithoutFormatterI* - fun:_ZN7testing9internal2lsIcSt11char_traitsIcE* - fun:_ZN16testing_internal26DefaultPrintNonContainerToI* - fun:_ZN7testing8internal14DefaultPrintToI* - fun:_ZN7testing8internal7PrintToI* - fun:_ZN7testing8internal16UniversalPrinterI* - fun:_ZN7testing8internal14UniversalPrintI* -} -{ - bug_64887_b - Memcheck:Uninitialized - fun:_itoa_word - fun:vfprintf - fun:*vsnprintf* - fun:*snprintf* - fun:_ZN7testing*PrintByteSegmentInObjectTo* - fun:_ZN7testing*PrintBytesInObjectToImplEPKhjPSo - fun:_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo - fun:_ZN7testing9internal220TypeWithoutFormatter* - fun:_ZN7testing9internal2lsIcSt11char_traitsIcE* - fun:_ZN16testing_internal26DefaultPrintNonContainerTo* - fun:_ZN7testing8internal14DefaultPrintToI* - fun:_ZN7testing8internal7PrintToI* - fun:_ZN7testing8internal16UniversalPrinterI* - fun:_ZN7testing8internal14UniversalPrintI* -} -{ - bug_64887_c - Memcheck:Uninitialized - fun:_itoa_word - fun:vfprintf - fun:*vsnprintf* - fun:*snprintf* - fun:_ZN7testing*PrintByteSegmentInObjectTo* - fun:_ZN7testing*PrintBytesInObjectToImplEPKhjPSo - fun:_ZN7testing9internal220PrintBytesInObjectToEPKhjPSo - fun:_ZN7testing9internal220TypeWithoutFormatter* - fun:_ZN7testing9internal2lsIcSt11char_traitsIcE* - fun:_ZN16testing_internal26DefaultPrintNonContainerTo* - fun:_ZN7testing8internal14DefaultPrintToI* - fun:_ZN7testing8internal7PrintToI* - fun:_ZN7testing8internal16UniversalPrinterI* - fun:_ZN7testing8internal14UniversalPrintI* -} -{ - bug_64887_d - Memcheck:Uninitialized - ... - fun:_ZNSolsEx - fun:_ZN7testing9internal220TypeWithoutFormatterIN5media7PreloadELNS0_8TypeKindE1EE10PrintValueERKS3_PSo - fun:_ZN7testing9internal2lsIcSt11char_traitsIcEN5media7PreloadEEERSt13basic_ostreamIT_T0_ESA_RKT1_ - fun:_ZN16testing_internal26DefaultPrintNonContainerToIN5media7PreloadEEEvRKT_PSo - fun:_ZN7testing8internal14DefaultPrintToIN5media7PreloadEEEvcNS0_13bool_constantILb0EEERKT_PSo - fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKT_PSo - fun:_ZN7testing8internal16UniversalPrinterIN5media7PreloadEE5PrintERKS3_PSo - fun:_ZN7testing8internal18TuplePrefixPrinter* - fun:_ZN7testing8internal12PrintTupleToINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKNSt3tr15tupleIT* - fun:_ZN7testing8internal16UniversalPrinterINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZN7testing8internal14UniversalPrintINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZNK7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE32UntypedDescribeUninterestingCallEPKvPSo - fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv - fun:_ZN7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE10InvokeWithERKNSt3tr15tupleIS3* - fun:_ZN7testing8internal14FunctionMockerIFvN5media7PreloadEEE6InvokeES3_ - fun:_ZN5media11MockDemuxer10SetPreloadENS_7PreloadE -} -{ - bug_64887_e - Memcheck:Uninitialized - ... - fun:_ZNSolsEx - fun:_ZN7testing9internal220TypeWithoutFormatterIN5media7PreloadELNS0_8TypeKindE1EE10PrintValueERKS3_PSo - fun:_ZN7testing9internal2lsIcSt11char_traitsIcEN5media7PreloadEEERSt13basic_ostreamIT_T0_ESA_RKT1_ - fun:_ZN16testing_internal26DefaultPrintNonContainerToIN5media7PreloadEEEvRKT_PSo - fun:_ZN7testing8internal14DefaultPrintToIN5media7PreloadEEEvcNS0_13bool_constantILb0EEERKT_PSo - fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKT_PSo - fun:_ZN7testing8internal16UniversalPrinterIN5media7PreloadEE5PrintERKS3_PSo - fun:_ZN7testing8internal18TuplePrefixPrinter* - fun:_ZN7testing8internal12PrintTupleToINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZN7testing8internal7PrintToIN5media7PreloadEEEvRKNSt3tr15tupleIT* - fun:_ZN7testing8internal16UniversalPrinterINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZN7testing8internal14UniversalPrintINSt3tr15tupleIN5media7PreloadENS2* - fun:_ZNK7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE32UntypedDescribeUninterestingCallEPKvPSo - fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv - fun:_ZN7testing8internal18FunctionMockerBaseIFvN5media7PreloadEEE10InvokeWithERKNSt3tr15tupleIS3* - fun:_ZN7testing8internal14FunctionMockerIFvN5media7PreloadEEE6InvokeES3_ - fun:_ZN5media11MockDemuxer10SetPreloadENS_7PreloadE -} -{ - bug_65940_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3IPC12ChannelProxy7Context13CreateChannelERKNS_13ChannelHandleERKNS_7Channel4ModeE - fun:_ZN3IPC12ChannelProxy4InitERKNS_13ChannelHandleENS_7Channel4ModeEP11MessageLoopb - fun:_ZN3IPC12ChannelProxyC2ERKNS_13ChannelHandleENS_7Channel4ModeEP11MessageLoopPNS0_7ContextEb - fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE -} -{ - bug_65940_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS_8ListenerEPN4base22SingleThreadTaskRunnerEbPNS8_13WaitableEventE - fun:_ZN7content11ChildThread4InitEv - fun:_ZN7content11ChildThreadC2ERKSs -} -{ - bug_65940_c - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEEE8allocateEmPKv - fun:_ZNSt12_Vector_baseI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE11_M_allocateEm - fun:_ZNSt6vectorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_ - fun:_ZNSt6vectorI13scoped_refptrIN3IPC12ChannelProxy13MessageFilterEESaIS4_EE9push_backERKS4_ - fun:_ZN3IPC12ChannelProxy7Context11OnAddFilterEv -} -{ - bug_65940_d - Memcheck:Leak - fun:_Znw* - fun:_ZN7content11ChildThread4InitEv - fun:_ZN7content11ChildThreadC* - ... - fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv -} -{ - bug_65940_e - Memcheck:Leak - fun:_Znw* - fun:_ZN7content16RenderThreadImpl4InitEv - fun:_ZN7content16RenderThreadImplC* - ... - fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv -} -{ - bug_66853_a - Memcheck:Leak - fun:_Znw* - fun:_ZN11ProfileImpl14GetHostZoomMapEv - ... - fun:_ZNK17ProfileImplIOData6Handle27GetMainRequestContextGetterEv - fun:_ZN11ProfileImpl17GetRequestContextEv - fun:_ZN19SafeBrowsingService5StartEv - fun:_ZN19SafeBrowsingService10InitializeEv - fun:_ZN22ResourceDispatcherHost10InitializeEv - fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv - fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv - fun:_ZN16ExtensionService4InitEv - fun:_ZN11ProfileImpl14InitExtensionsE* - fun:_ZN14ProfileManager10AddProfileEP7Profileb -} -{ - bug_67142 - Memcheck:Leak - fun:_Znw* - fun:_ZN16ChildProcessHost13CreateChannelEv - fun:_ZN14GpuProcessHost4InitEv -} -{ - bug_67261 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3sql10Connection18GetUniqueStatementEPKc - fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc - fun:_ZN8appcache16AppCacheDatabase22PrepareCachedStatementERKN3sql11StatementIDEPKcPNS1_9StatementE -} -{ - bug_67553 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNSt3mapISs13scoped_refptrIK9ExtensionESt4lessISsESaISt4pairIKSsS3_EEEixERS7_ - fun:_ZN16ExtensionInfoMap12AddExtensionEPK9Extension -} -{ - bug_68069_a - Memcheck:Leak - fun:malloc - obj:* - obj:* - obj:* - obj:* - fun:_ZN3gfx20GetGLCoreProcAddressEPKc - fun:_ZN3gfx22InitializeGLBindingsGLEv - fun:_ZN3gfx20InitializeGLBindingsENS_16GLImplementationE - fun:_ZN3gfx9GLSurface16InitializeOneOffEv -} -{ - bug_68069_b - Memcheck:Leak - fun:malloc - fun:XextCreateExtension - ... - fun:_ZN3gfx12GLSurfaceGLX16InitializeOneOffEv - fun:_ZN3gfx9GLSurface24InitializeOneOffInternalEv - fun:_ZN3gfx9GLSurface16InitializeOneOffEv -} -{ - bug_68553 - Memcheck:Leak - fun:_Znw* - fun:_ZN3net25DiskCacheBasedSSLHostInfoC1ERKSsRKNS_9SSLConfigEPNS_12CertVerifierEPNS_9HttpCacheE - fun:_ZN3net9HttpCache25SSLHostInfoFactoryAdaptor10GetForHostERKSsRKNS_9SSLConfigE - fun:_ZN3net13SSLConnectJob12DoTCPConnectEv - fun:_ZN3net13SSLConnectJob6DoLoopEi - fun:_ZN3net13SSLConnectJob15ConnectInternalEv - fun:_ZN3net10ConnectJob7ConnectEv - fun:_ZN3net8internal26ClientSocketPoolBaseHelper21RequestSocketInternalERKSsPKNS1_7RequestE - fun:_ZN3net8internal26ClientSocketPoolBaseHelper13RequestSocketERKSsPKNS1_7RequestE - fun:_ZN3net20ClientSocketPoolBaseINS_15SSLSocketParamsEE13RequestSocketERKSsRK13scoped_refptrIS1_ENS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE - fun:_ZN3net19SSLClientSocketPool13RequestSocketERKSsPKvNS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE - fun:_ZN3net18ClientSocketHandle4InitINS_15SSLSocketParamsENS_19SSLClientSocketPoolEEEiRKSsRK13scoped_refptrIT_ENS_15RequestPriorityEP14CallbackRunnerI6Tuple1IiEEPT0_RKNS_11BoundNetLogE -} -{ - Bug_69919 - Memcheck:Leak - fun:calloc - ... - fun:_ZN3gfx15OSMesaGLContext10InitializeEjPNS_9GLContextE - fun:_ZN3gfx9GLContext24CreateOffscreenGLContextEPS0_ - fun:*InitializeGLContextEv -} -{ - Bug_69934_a - Memcheck:Leak - fun:_Znw* - fun:_ZN*NPObjectProxy10NPAllocateEP4_NPPP7NPClass - fun:_NPN_CreateObject - fun:_ZN5blink11WebBindings12createObjectEP4_NPPP7NPClass -} -{ - Bug_69934_b - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC11SyncMessage13GenerateReplyEPKNS_7MessageE - fun:_ZN3IPC17SyncMessageSchema* -} -{ - bug_70327 - Memcheck:Leak - ... - fun:shaper_font_cache_insert - fun:get_shaper_and_font - fun:itemize_state_process_run - fun:pango_itemize_with_base_dir - fun:pango_layout_check_lines - fun:pango_layout_get_extents_internal - fun:pango_layout_get_pixel_extents - fun:pango_layout_get_pixel_size - fun:_ZN3gfx10Canvas13SizeStringIntERKSbItN4base20string16_char_traitsESaItEERKNS_4FontEPiSA_i -} -{ - bug_71152 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN14SessionService20OnGotSessionCommandsEi13scoped_refptrIN18BaseSessionService26InternalGetCommandsRequestEE -} -{ - bug_71728 - Memcheck:Leak - fun:_Znw* - fun:*DownloadFileTest5SetUpEv -} -{ - bug_72544 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEj - fun:_ZN3WTF10RefCountedIN7WebCore14StyleSheetListEEnwEj - fun:_ZN7WebCore14StyleSheetList6createEPNS_8DocumentE - fun:_ZN7WebCore8DocumentC2EPNS_5FrameERKNS_4KURLEbbS5_ - fun:_ZN7WebCore12HTMLDocumentC1EPNS_5FrameERKNS_4KURLES5_ - fun:_ZN7WebCore12HTMLDocument6createEPNS_5FrameERKNS_4KURLES5_ - fun:_ZN7WebCore17DOMImplementation14createDocumentERKN3WTF6StringEPNS_5FrameERKNS_4KURLEb - fun:_ZN7WebCore14DocumentWriter14createDocumentERKNS_4KURLE - fun:_ZN7WebCore14DocumentWriter5beginERKNS_4KURLEbPNS_14SecurityOriginE - fun:_ZN7WebCore11FrameLoader4initEv - fun:_ZN7WebCore5Frame4initEv - fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPNS_11WebViewImplE - fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE - fun:_ZN10RenderViewC1EP16RenderThreadBaseiiRK19RendererPreferencesRK14WebPreferencesPN4base14RefCountedDataIiEEixRKSbItNS8_20string16_char_traitsESaItEE - fun:_ZN10RenderView6CreateEP16RenderThreadBaseiiRK19RendererPreferencesRK14WebPreferencesPN4base14RefCountedDataIiEEixRKSbItNS8_20string16_char_traitsESaItEE - fun:_ZN12RenderThread15OnCreateNewViewERK18ViewMsg_New_Params -} -{ - bug_72698_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN13ProfileIOData20InitializeOnUIThreadEP7Profile -} -{ - bug_73415 - Memcheck:Unaddressable - fun:_ZN23AccessibilityController36shouldDumpAccessibilityNotificationsEv - fun:_ZN11WebViewHost29postAccessibilityNotificationERKN5blink22WebAccessibilityObjectENS0_28WebAccessibilityNotificationE - fun:_ZN5blink16ChromeClientImpl29postAccessibilityNotificationEPN7WebCore19AccessibilityObjectENS1_13AXObjectCache14AXNotificationE - fun:_ZN7WebCore13AXObjectCache24postPlatformNotificationEPNS_19AccessibilityObjectENS0_14AXNotificationE -} -{ - bug_73675 - Memcheck:Leak - fun:_Znw* - fun:_ZN20LayoutTestController13waitUntilDoneERKN3WTF6VectorI10CppVariantLj0EEEPS2_ - fun:_ZN13CppBoundClass14MemberCallbackI20LayoutTestControllerE3runERKN3WTF6VectorI10CppVariantLj0EEEPS5_ - fun:_ZN13CppBoundClass6invokeEPvPK10_NPVariantjPS1_ - fun:_ZN11CppNPObject6invokeEP8NPObjectPvPK10_NPVariantjPS3_ - fun:_ZN7WebCore18npObjectInvokeImplERKN2v89ArgumentsENS_18InvokeFunctionTypeE - fun:_ZN7WebCore21npObjectMethodHandlerERKN2v89ArgumentsE - fun:_ZN2v88internal19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_47_GLOBAL__N_v8_src_builtins.cc_*BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEE - obj:* -} -{ - bug_75019 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN14GpuDataManagerC1Ev - fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv - fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv - fun:_ZN14GpuDataManager11GetInstanceEv - fun:_Z11BrowserMainRK18MainFunctionParams - fun:_ZN20InProcessBrowserTest5SetUpEv -} -{ - bug_75051 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net12CertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEEPPv - fun:_ZN3net25SingleRequestCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEE - fun:_ZN3net18SSLClientSocketNSS12DoVerifyCertEi - fun:_ZN3net18SSLClientSocketNSS15DoHandshakeLoopEi -} -{ - bug_75127a - Memcheck:Uninitialized - ... - fun:png_process_data - fun:_ZN3gfx8PNGCodec6Decode* -} -{ - bug_75127b - Memcheck:Uninitialized - ... - fun:png_process_data - fun:_ZN3gfx8PNGCodec6Decode* -} -{ - bug_75127c - Memcheck:Uninitialized - ... - fun:png_process_data - fun:_ZN3gfx8PNGCodec6Decode* -} -{ - bug_76197a - Memcheck:Unaddressable - fun:sqlite3DbFree - fun:releaseMemArray - fun:sqlite3VdbeDelete - fun:sqlite3VdbeFinalize - fun:sqlite3_finalize - fun:_ZN3sql10Connection12StatementRef5CloseEv - fun:_ZN3sql10Connection12StatementRefD2Ev - fun:_ZN3sql10Connection12StatementRefD1Ev - fun:_ZNK4base10RefCountedIN3sql10Connection12StatementRefEE7ReleaseEv - fun:_ZN13scoped_refptrIN3sql10Connection12StatementRefEED2Ev - fun:_ZN13scoped_refptrIN3sql10Connection12StatementRefEED1Ev - fun:_ZNSt4pairIKN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEEED2Ev - fun:_ZNSt4pairIKN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEEED1Ev - fun:_ZN9__gnu_cxx13new_allocatorISt4pairIKN3sql11StatementIDE13scoped_refptrINS2_10Connection12StatementRefEEEE7destroyEPS9_ - fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE12destroy_nodeEPSt13_Rb_tree_nodeIS8_E - fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E - fun:_ZNSt8_Rb_treeIN3sql11StatementIDESt4pairIKS1_13scoped_refptrINS0_10Connection12StatementRefEEESt10_Select1stIS8_ESt4lessIS1_ESaIS8_EE5clearEv - fun:_ZNSt3mapIN3sql11StatementIDE13scoped_refptrINS0_10Connection12StatementRefEESt4lessIS1_ESaISt4pairIKS1_S5_EEE5clearEv - fun:_ZN3sql10Connection5CloseEv - fun:_ZN3sql10ConnectionD2Ev - fun:_ZN3sql10ConnectionD1Ev - fun:_ZN7history16InMemoryDatabaseD0Ev -} -{ - bug_76197b - Memcheck:Unaddressable - ... - fun:sqlite3_step - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc - fun:_ZN7history11URLDatabase31CreateKeywordSearchTermsIndicesEv - fun:_ZN7history16InMemoryDatabase12InitFromDiskE* - fun:_ZN7history22InMemoryHistoryBackend4InitE* -} -{ - bug_77766 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN7WebCore18PerformTaskContextnwEm - fun:_ZN7WebCore8Document8postTaskEN3WTF10PassOwnPtrINS_22ScriptExecutionContext4TaskEEE - fun:_ZN7WebCore20WorkerMessagingProxy22workerContextDestroyedEv - fun:_ZN5blink19WebWorkerClientImpl22workerContextDestroyedEv - fun:_ZN7WebCore13WorkerContextD2Ev - fun:_ZN7WebCore22DedicatedWorkerContextD0Ev - fun:_ZN3WTF10RefCountedIN7WebCore13WorkerContextEE5derefEv - fun:_ZN3WTF6RefPtrIN7WebCore13WorkerContextEEaSEPS2_ - fun:_ZN7WebCore12WorkerThread12workerThreadEv - fun:_ZN7WebCore12WorkerThread17workerThreadStartEPv - fun:_ZN3WTFL16threadEntryPointEPv - fun:_ZN3WTFL19wtfThreadEntryPointEPv -} -{ - bug_78201 - Memcheck:Leak - fun:_Znw* - fun:_ZN18BrowserProcessImpl28CreateResourceDispatcherHostEv - fun:_ZN18BrowserProcessImpl24resource_dispatcher_hostEv - fun:_ZN16ExtensionService4InitEv - fun:_ZN11ProfileImpl14InitExtensionsE* -} -{ - bug_78786 - Memcheck:Leak - fun:_Znw* - fun:*35NonBlockingInvalidationNotifierTest5SetUpEv -} -{ - bug_79357a - Memcheck:Unaddressable - ... - fun:*FilePathWatcherImpl*Watch*Delegate* - fun:*FilePathWatcher*Watch* - fun:_ZN21UserStyleSheetWatcher4InitEv -} -{ - bug_79357b - Memcheck:Leak - ... - fun:*FilePathWatcherImpl*Watch*Delegate* - fun:*FilePathWatcher*Watch* - fun:_ZN21UserStyleSheetWatcher4InitEv -} -{ - bug_79651 - Memcheck:Leak - ... - fun:_ZN8notifier14XmppConnectionC1ERKN4buzz18XmppClientSettingsERK13scoped_refptrIN3net23URLRequestContextGetterEEPNS0_8DelegateEPNS1_11PreXmppAuthE - fun:_ZN8notifier18SingleLoginAttempt13OnNewSettingsERKNS_18ConnectionSettingsE - fun:_ZN8notifier23XmppConnectionGenerator17UseNextConnectionEv - fun:_ZN8notifier23XmppConnectionGenerator15StartGeneratingEv - fun:_ZN8notifier18SingleLoginAttemptC1EPNS_13LoginSettingsEPNS0_8DelegateE - fun:_ZN8notifier5Login15StartConnectionEv - fun:_ZN13sync_notifier20InvalidationNotifier17UpdateCredentialsERKSsS2_ - fun:*35InvalidationNotifierTest_Basic_Test8TestBodyEv -} -{ - bug_79652 - Memcheck:Leak - ... - fun:_ZN8chromeos14AudioMixerAlsa15ConnectInternalEv - fun:_ZN8chromeos14AudioMixerAlsa7ConnectEv -} -{ - bug_79654_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNSt3setIP16RenderWidgetHostSt4lessIS1_ESaIS1_EE6insertERKS1_ - fun:_ZN*9TabLoader12TabIsLoadingEP24NavigationControllerImpl - fun:_ZN*18SessionRestoreImpl21ProcessSessionWindowsEPSt6vectorIP13SessionWindowSaIS3_EE - fun:_ZN*18SessionRestoreImpl12OnGotSessionEiPSt6vectorIP13SessionWindowSaIS3_EE -} -{ - bug_79654_b - Memcheck:Leak - fun:_Znw* - ... - fun:*RenderWidgetHost* - ... - fun:_ZNSt3setIP16RenderWidgetHostSt4lessIS1_ESaIS1_EE6insertERKS1_ - fun:*TabLoader7ObserveEiRKN7content18NotificationSourceERKNS1_19NotificationDetailsE - fun:_ZN23NotificationServiceImpl* - fun:_ZN15WebContentsImpl12SetIsLoading* - fun:_ZN15WebContentsImpl14RenderViewGone* -} -{ - bug_79865a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN33MalwareDetailsTest_HTTPCache_Test8TestBodyEv -} -{ - bug_79865b - Memcheck:Leak - ... - fun:_Znw* - fun:_ZN14TestingProfile20CreateRequestContextEv - fun:_ZN42MalwareDetailsTest_HTTPCacheNoEntries_Test8TestBodyEv -} -{ - bug_79933a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN21TestURLRequestContext4InitEv - ... - fun:_ZN21TestURLRequestContextC1Ev - fun:_ZN27TestURLRequestContextGetter20GetURLRequestContextEv -} -{ - bug_16089 WorkerPool threads can leak by design - Memcheck:Leak - fun:_Znw* - fun:_ZN4base22PosixDynamicThreadPool8PostTask* -} -{ - bug_80462_a - Memcheck:Leak - fun:malloc - fun:_ZN7WebCoreL15allocV8NPObjectEP4_NPPP7NPClass - fun:_NPN_CreateObject - fun:_ZN7WebCore22npCreateV8ScriptObjectEP4_NPPN2v86HandleINS2_6ObjectEEEPNS_9DOMWindowE - fun:_ZN5blinkL16makeIntArrayImplERKNS_9WebVectorIiEE - fun:_ZN5blink11WebBindings12makeIntArrayERKNS_9WebVectorIiEE -} -{ - bug_80462_b - Memcheck:Leak - fun:malloc - fun:_ZN7WebCoreL15allocV8NPObjectEP4_NPPP7NPClass - fun:_NPN_CreateObject - fun:_ZN7WebCore22npCreateV8ScriptObjectEP4_NPPN2v86HandleINS2_6ObjectEEEPNS_9DOMWindowE - fun:_ZN5blinkL19makeStringArrayImplERKNS_9WebVectorINS_9WebStringEEE - fun:_ZN5blink11WebBindings15makeStringArrayERKNS_9WebVectorINS_9WebStringEEE -} -{ - bug_80537_a - Memcheck:Leak - fun:calloc - ... - fun:_ZN3gfx15GLContextOSMesa11MakeCurrentEv -} -{ - bug_80537_b - Memcheck:Leak - fun:calloc - ... - fun:_ZN3gfx15GLContextOSMesa11MakeCurrentEPNS_9GLSurfaceE -} -{ - bug_80551 - Memcheck:Leak - fun:_Znw* - fun:_Z11BrowserMainRK18MainFunctionParams - fun:_ZN20InProcessBrowserTest5SetUpEv -} -{ - bug_80550_a - Memcheck:Leak - fun:_Znw* - fun:_ZN16RenderWidgetHost11WasRestoredEv -} -{ - bug_80550_b - Memcheck:Leak - fun:_Znw* - fun:_ZN16RenderWidgetHost9WasHiddenEv -} -{ - bug_80663 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvPSsPSt6vectorINS1_11CookieStore10CookieInfoESaIS6_EEEPS2_EENS_8internal20InvokerStorageHolderINSD_15InvokerStorage1IT_T0_EEEESG_RKSH_ - fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv - fun:_ZN3net17URLRequestHttpJob5StartEv - fun:_ZN3net10URLRequest8StartJobEPNS_13URLRequestJobE - fun:_ZN3net10URLRequest5StartEv - fun:_ZN10URLFetcher4Core15StartURLRequestEv - fun:_ZN10URLFetcher4Core30StartURLRequestWhenAppropriateEv -} -{ - bug_82717 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN6chrome26ChromeContentBrowserClient24RenderProcessHostCreatedEPN7content17RenderProcessHostE - fun:_ZN21RenderProcessHostImpl4Init* - ... - fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP* - fun:_ZN22RenderFrameHostManager14InitRenderViewEP* - ... - fun:_ZN22RenderFrameHostManager8NavigateERKN7content19NavigationEntryImplE - fun:_ZN15WebContentsImpl15NavigateToEntryERKN7content19NavigationEntryImplENS0_20NavigationController10ReloadTypeE -} -{ - bug_83609 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4Bind*TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_ - fun:_ZN4base11MessageLoop15PostDelayedTaskERKN15tracked_objects8LocationEP4Taskx - fun:_ZN13BrowserThread14PostTaskHelperENS_2IDERKN15tracked_objects8LocationEP4Taskxb - fun:_ZN13BrowserThread8PostTaskENS_2IDERKN15tracked_objects8LocationEP4Task -} -{ - bug_83609b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4Bind*TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_ - fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationEP4Task -} -{ - bug_84224_a - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocator*PendingTaskEE8allocate* - fun:_ZN*_Deque_baseIN*PendingTaskESaIS1_*_M_allocate_* - ... - fun:_ZNSt5dequeIN*PendingTaskESaIS1_EE*push_back* - fun:_ZNSt5queueIN4*PendingTask*deque*push* - fun:_ZN4base11MessageLoop18AddToIncomingQueueEPN*PendingTaskE* -} -{ - bug_84224_b - Memcheck:Unaddressable - fun:_ZN13scoped_refptrIN4base8internal18InvokerStorageBaseEEC2ERKS3_ - fun:_ZN13scoped_refptrIN4base8internal18InvokerStorageBaseEEC1ERKS3_ - fun:_ZN4base8internal12CallbackBaseC2ERKS1_ - fun:_ZN4base8CallbackIFvvEEC2ERKS2_ - fun:_ZN4base8CallbackIFvvEEC1ERKS2_ - fun:_ZN4base11MessageLoop11PendingTaskC2ERKS0_ - fun:_ZN4base11MessageLoop11PendingTaskC1ERKS0_ - fun:_ZN9__gnu_cxx13new_allocatorIN11MessageLoop11PendingTaskEE9constructEPS2_RKS2_ - fun:_ZNSt5dequeIN11MessageLoop11PendingTaskESaIS1_EE9push_backERKS1_ - fun:_ZNSt5queueIN11MessageLoop11PendingTaskESt5dequeIS1_SaIS1_EEE4pushERKS1_ - fun:_ZN4base11MessageLoop18AddToIncomingQueueEPNS_11PendingTaskE -} -{ - bug_84265 - Memcheck:Leak - fun:_Znw* - fun:_ZN12LoginHandler6CreateEPN3net17AuthChallengeInfoEPNS0_10URLRequestE - fun:_Z17CreateLoginPromptPN3net17AuthChallengeInfoEPNS_10URLRequestE - fun:_ZN22ResourceDispatcherHost14OnAuthRequiredEPN3net10URLRequestEPNS0_17AuthChallengeInfoE - fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv -} -{ - bug_84770_a - Memcheck:Unaddressable - fun:_ZN5blink21FrameLoaderClientImpl12allowPluginsEb - fun:_ZN7WebCore14SubframeLoader12allowPluginsENS_28ReasonForCallingAllowPluginsE -} -{ - bug_84770_b - Memcheck:Unaddressable - fun:_ZN5blink21FrameLoaderClientImpl15allowJavaScriptEb - fun:_ZN7WebCore16ScriptController17canExecuteScriptsENS_33ReasonForCallingCanExecuteScriptsE -} -{ - bug_84770_c - Memcheck:Unaddressable - fun:_ZN5blink21FrameLoaderClientImpl20allowScriptExtensionERKN3WTF6StringEi - fun:_ZN7WebCore16V8DOMWindowShell16createNewContextEN2v86HandleINS1_6ObjectEEEi -} -{ - bug_86481 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocator*FilePath*allocate* - fun:_ZNSt11_Deque_base*FilePath*_M_allocate_map* - fun:_ZNSt11_Deque_base*FilePath*_M_initialize_map* - fun:_ZNSt11_Deque_baseI*FilePath* - fun:_ZNSt5dequeI*FilePath* - fun:_ZNSt5stackI*FilePath*deque* - fun:_ZN9file_util14FileEnumeratorC1E* - fun:_ZN7history20ExpireHistoryBackend25DoExpireHistoryIndexFilesEv -} -{ - bug_87423 - Memcheck:Uninitialized - fun:_ZNK3net15HttpBasicStream23LogNumRttVsBytesMetricsEv - fun:_ZN3net22HttpNetworkTransaction18DoReadBodyCompleteEi - fun:_ZN3net22HttpNetworkTransaction6DoLoopEi - fun:_ZN3net22HttpNetworkTransaction4ReadEPNS_8IOBufferEiP14CallbackRunnerI6Tuple1IiEE - fun:_Z15ReadTransactionPN3net15HttpTransactionEPSs - fun:_ZN3net73HttpNetworkTransactionTest_ErrorResponseTofHttpsConnectViaHttpsProxy_Test8TestBodyEv -} -{ - bug_88640_a - Memcheck:Leak - fun:_Znw* - fun:_ZN11ProfileImpl30InitRegisteredProtocolHandlersEv - fun:_ZN11ProfileImpl11DoFinalInitEv - fun:_ZN11ProfileImpl13OnPrefsLoadedEb -} -{ - bug_88640_b - Memcheck:Leak - ... - fun:_ZN11ProfileImpl13OnPrefsLoadedEb - ... - fun:_ZN11ProfileImplC*E* -} -{ - bug_88640_c - Memcheck:Leak - fun:_Znw* - fun:_ZN29ChromeURLRequestContextGetter14CreateOriginalEP7ProfilePK13ProfileIOData - fun:_ZN17ProfileImplIOData6Handle4InitE* - fun:_ZN11ProfileImpl11DoFinalInitEv - fun:_ZN11ProfileImpl13OnPrefsLoadedEb -} -{ - bug_81796 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base16MessageLoopProxy22currentEv - fun:_ZN3IPC12ChannelProxy7ContextC1EPNS_7Channel8ListenerEPN4base16MessageLoopProxyE - fun:_ZN3IPC12ChannelProxyC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEPN4base16MessageLoopProxyE -} -{ - bug_89304 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net20ClientSocketPoolBaseINS_*SocketParamsEE13RequestSocketERKSsRK13scoped_refptrIS1_ENS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE - fun:_ZN3net*SocketPool13RequestSocketERKSsPKvNS_15RequestPriorityEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEERKNS_11BoundNetLogE - fun:_ZN3net18ClientSocketHandle4Init* - ... - fun:_ZN3net23ClientSocketPoolManager30InitSocketHandleForHttpRequestERK4GURLRKNS_18HttpRequestHeadersEiNS_15RequestPriorityEPNS_18HttpNetworkSessionERKNS_9ProxyInfoEbbRKNS_9SSLConfigESF_RKNS_11BoundNetLogEPNS_18ClientSocketHandleEP14CallbackRunnerI6Tuple1IiEE - fun:_ZN3net21HttpStreamFactoryImpl3Job16DoInitConnectionEv -} -{ - bug_89311 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net16HttpStreamParser22DoParseResponseHeadersEi - fun:_ZN3net16HttpStreamParser20ParseResponseHeadersEv - fun:_ZN3net16HttpStreamParser21DoReadHeadersCompleteEi -} -{ - bug_89942_a - Memcheck:Leak - ... - fun:_ZN10ZygoteHost11ForkRequestERKSt6vectorISsSaISsEERKS0_ISt4pairIjiESaIS6_EERKSs - fun:_ZN20ChildProcessLauncher7Context14LaunchInternalE13scoped_refptrIS0_EN13BrowserThread2IDEbRKSt6vectorISt4pairISsSsESaIS7_EEiP11CommandLine -} -{ - bug_89942_b - Memcheck:Leak - ... - fun:_ZNSt6vectorISt4pairIjiESaIS1_EE9push_backERKS1_ - fun:_ZN20ChildProcessLauncher7Context14LaunchInternalE13scoped_refptrIS0_EN13BrowserThread2IDEbRKSt6vectorISt4pairISsSsESaIS7_EEiP11CommandLine -} -{ - bug_90057a - Memcheck:Leak - ... - fun:_ZN3net13CookieMonster9InitStoreEv - fun:_ZN3net13CookieMonster15InitIfNecessaryEv - fun:_ZN3net13CookieMonster30GetAllCookiesForURLWithOptionsERK4GURLRKNS_13CookieOptionsE - fun:_ZN3net13CookieMonster19GetAllCookiesForURLERK4GURL - fun:_ZN22ResourceDispatcherHost13CanGetCookiesEPN3net10URLRequestE - fun:_ZN3net10URLRequest13CanGetCookiesEv - fun:_ZN3net13URLRequestJob13CanGetCookiesEv - fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv -} -{ - bug_90057b - Memcheck:Leak - ... - fun:_ZN3net13CookieMonster9InitStoreEv - fun:_ZN3net13CookieMonster15InitIfNecessaryEv - fun:_ZN3net13CookieMonster21GetCookiesWithOptionsERK4GURLRKNS_13CookieOptionsE - fun:_ZN3net13CookieMonster26GetCookiesWithOptionsAsyncERK4GURLRKNS_13CookieOptionsERKN4base8CallbackIFvRKSsEEE - fun:_ZN3net11CookieStore15GetCookiesAsyncERK4GURLRKN4base8CallbackIFvRKSsEEE - fun:_ZN12_GLOBAL__N_120GetCookiesOnIOThreadERK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSs -} -{ - bug_90057c - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net17URLRequestHttpJob14SaveNextCookieEv - fun:_ZN3net17URLRequestHttpJob35SaveCookiesAndNotifyHeadersCompleteEv - fun:_ZN3net17URLRequestHttpJob16OnStartCompletedEi -} -{ - bug_90215_c - Memcheck:Leak - ... - fun:_ZN3net13URLRequestJob21NotifyRestartRequiredEv - fun:_ZN8appcache21AppCacheURLRequestJob13BeginDeliveryEv -} -{ - bug_90215_d - Memcheck:Leak - ... - fun:_ZN8appcache19AppCacheStorageImpl23RunOnePendingSimpleTaskEv -} -{ - bug_90215_e - Memcheck:Leak - fun:_Znw* - fun:_ZN8appcache15AppCacheService10InitializeE* - fun:_ZN21ChromeAppCacheService20InitializeOnIOThreadE* -} -{ - bug_90215_f - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN26TransportSecurityPersisterC1EPN3net22TransportSecurityStateERKN4base8FilePathEb - fun:_ZNK13ProfileIOData4InitEPSt3mapISs10linked_ptrIN3net20URLRequestJobFactory15ProtocolHandlerEESt4lessISsESaISt4pairIKSsS5_EEE - fun:_ZN12_GLOBAL__N_114FactoryForMain6CreateEv - fun:_ZN29ChromeURLRequestContextGetter20GetURLRequestContextEv - fun:_ZN7content21ChromeAppCacheService20InitializeOnIOThreadERKN4base8FilePathEPNS_15ResourceContextEPN3net23URLRequestContextGetterE13scoped_refptrIN5quota20SpecialStoragePolicyEE -} -{ - bug_90240 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN2pp5proxy26PPP_Instance_Private_Proxy22OnMsgGetInstanceObjectEiNS0_24SerializedVarReturnValueE -} -{ - bug_90400 - Memcheck:Leak - fun:_Znw* - fun:_ZN11ProfileImpl24GetUserStyleSheetWatcherEv - fun:_ZN6chrome26ChromeContentBrowserClient14GetWebkitPrefs* - fun:_ZN15WebContentsImpl14GetWebkitPrefsEv -} -{ - bug_90487a - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN5quota11QuotaClientEEE8allocateEjPKv - fun:_ZNSt10_List_baseIPN5quota11QuotaClientESaIS2_EE11_M_get_nodeEv - fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE14_M_create_nodeERKS2_ - fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE9_M_insertESt14_List_iteratorIS2_ERKS2_ - fun:_ZNSt4listIPN5quota11QuotaClientESaIS2_EE9push_backERKS2_ - fun:_ZN5quota12QuotaManager14RegisterClientEPNS_11QuotaClientE - fun:_ZN5quota17QuotaManagerProxy14RegisterClientEPNS_11QuotaClientE -} -{ - bug_90487b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - ... - fun:_ZN5quota12QuotaManager* -} -{ - bug_90496a - Memcheck:Leak - ... - fun:_ZN3IPC16MessageWithTupleI6Tuple2Ii23ResourceHostMsg_RequestEE8DispatchI22ResourceDispatcherHostS6_iRKS2_EEbPKNS_7MessageEPT_PT0_MSC_FvRSA_T1_T2_E - fun:_ZN22ResourceDispatcherHost17OnMessageReceivedERKN3IPC7MessageEP21ResourceMessageFilterPb - fun:_ZN21ResourceMessageFilter17OnMessageReceivedERKN3IPC7MessageEPb - fun:_ZN20BrowserMessageFilter15DispatchMessageERKN3IPC7MessageE - fun:_ZN20BrowserMessageFilter17OnMessageReceivedERKN3IPC7MessageE - fun:_ZN3IPC12ChannelProxy7Context10TryFiltersERKNS_7MessageE - fun:_ZN3IPC12ChannelProxy7Context17OnMessageReceivedERKNS_7MessageE - fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv - fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi -} -{ - bug_90496b - Memcheck:Leak - fun:_Znw* - fun:_ZN22ResourceDispatcherHost23CompleteResponseStartedEPN3net10URLRequestE - fun:_ZN22ResourceDispatcherHost17OnResponseStartedEPN3net10URLRequestE - fun:_ZN3net10URLRequest21NotifyResponseStartedEv - fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv -} -{ - bug_90496c - Memcheck:Leak - fun:_Znw* - fun:_ZN20AsyncResourceHandler15OnReadCompletedEiPi - fun:_ZN23BufferedResourceHandler15OnReadCompletedEiPi - fun:_ZN27SafeBrowsingResourceHandler15OnReadCompletedEiPi - fun:_ZN22OfflineResourceHandler15OnReadCompletedEiPi - fun:_ZN22ResourceDispatcherHost12CompleteReadEPN3net10URLRequestEPi - fun:_ZN22ResourceDispatcherHost15OnReadCompletedEPN3net10URLRequestEi - fun:_ZN3net10URLRequest19NotifyReadCompletedEi - fun:_ZN3net13URLRequestJob18NotifyReadCompleteEi - fun:_ZN19URLRequestChromeJob13DataAvailableEP16RefCountedMemory - fun:_ZN27ChromeURLDataManagerBackend13DataAvailableEiP16RefCountedMemory - fun:_ZN20ChromeURLDataManager10DataSource22SendResponseOnIOThreadEi13scoped_refptrI16RefCountedMemoryE -} -{ - bug_90496d - Memcheck:Leak - ... - fun:_ZN24CrossSiteResourceHandler14ResumeResponseEv - fun:_ZN22ResourceDispatcherHost12OnSwapOutACKERK22ViewMsg_SwapOut_Params - fun:_ZN18RenderWidgetHelper21OnCrossSiteSwapOutACKERK22ViewMsg_SwapOut_Params -} -{ - bug_90496e - Memcheck:Leak - ... - fun:_ZN14SharedIOBuffer4InitEv - fun:_ZN20AsyncResourceHandler10OnWillReadEiPPN3net8IOBufferEPii - fun:_ZN24CrossSiteResourceHandler10OnWillReadEiPPN3net8IOBufferEPii - fun:_ZN23BufferedResourceHandler10OnWillReadEiPPN3net8IOBufferEPii - fun:_ZN27SafeBrowsingResourceHandler10OnWillReadEiPPN3net8IOBufferEPii - fun:_ZN22OfflineResourceHandler10OnWillReadEiPPN3net8IOBufferEPii - fun:_ZN22ResourceDispatcherHost4ReadEPN3net10URLRequestEPi - fun:_ZN22ResourceDispatcherHost12StartReadingEPN3net10URLRequestE -} -{ - bug_90671 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNK3sql9Statement*ColumnString* - fun:_ZN7history11URLDatabase10FillURLRowERN3sql9StatementEPNS_6URLRowE - fun:_ZN7history11URLDatabase13URLEnumerator10GetNextURLEPNS_6URLRowE - fun:_ZN7history14HistoryBackend11IterateURLsEPN14HistoryService13URLEnumeratorE -} -{ - bug_91199 - Memcheck:Leak - fun:_Znw* - fun:_ZN19URLRequestChromeJob15GetResponseInfoEPN3net16HttpResponseInfoE - fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv - fun:_ZN19URLRequestChromeJob10StartAsyncEv -} -{ - bug_92571 - Memcheck:Leak - fun:_Znw* - fun:_ZN7history16TopSitesDatabase8CreateDBE* - fun:_ZN7history16TopSitesDatabase4InitE* - fun:_ZN7history15TopSitesBackend16InitDBOnDBThreadE* -} -{ - bug_92741a - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIPFvPNS_13WaitableEventEPSsRKSsES2_S3_EENS_8internal20InvokerStorageHolderINS8_15InvokerStorage2IT_T0_T1_EEEESB_RKSC_RKSD_ - fun:_ZN12_GLOBAL__N_120GetCookiesOnIOThreadERK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSs - fun:_Z18DispatchToFunctionIPFvRK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEEPN4base13WaitableEventEPSsES0_S6_SB_SC_EvT_RK6Tuple4IT0_T1_T2_T3_E -} -{ - bug_92741b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvPSsPSt6vectorINS1_11CookieStore10CookieInfoESaIS6_EEENS_7WeakPtrIS2_EEEENS_8internal20InvokerStorageHolderINSE_15InvokerStorage1IT_T0_EEEESH_RKSI_ - fun:_ZN3net17URLRequestHttpJob24CheckCookiePolicyAndLoadERKNS_10CookieListE -} -{ - bug_92741c - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMN3net17URLRequestHttpJobEFvRKNS1_10CookieListEENS_7WeakPtrIS2_EEEENS_8internal20InvokerStorageHolderINSA_15InvokerStorage1IT_T0_EEEESD_RKSE_ - fun:_ZN3net17URLRequestHttpJob23AddCookieHeaderAndStartEv - fun:_ZN3net17URLRequestHttpJob5StartEv - fun:_ZN3net10URLRequest8StartJobEPNS_13URLRequestJobE - fun:_ZN3net10URLRequest5StartEv -} -{ - bug_93250a - Memcheck:Leak - fun:_Znw* - ... - fun:*SHA1Fingerprint* - fun:_ZN3net16CertVerifyResultaSERKS0_ - fun:_ZN3net12CertVerifier12HandleResultEPNS_15X509CertificateERKSsiiRKNS_16CertVerifyResultE - fun:_ZN3net18CertVerifierWorker7DoReplyEv -} -{ - bug_93250b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMNS_6subtle18TaskClosureAdapterEFvvEPS2_EENS_8internal20InvokerStorageHolderINS6_15InvokerStorage1IT_T0_EEEES9_RKSA_ - fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationEP4Task - fun:_ZN3net18CertVerifierWorker6FinishEv - fun:_ZN3net18CertVerifierWorker3RunEv -} -{ - bug_93730_a - Memcheck:Leak - fun:_Znw* - fun:_ZN14ServiceProcess10InitializeEP16MessageLoopForUIRK11CommandLineP19ServiceProcessState - fun:_Z18ServiceProcessMainRK18MainFunctionParams - ... - fun:ChromeMain - fun:main -} -{ - bug_93730_b - Memcheck:Leak - fun:_Zna* - fun:_ZN4base13LaunchProcessERKSt6vectorISsSaISsEERKNS_13LaunchOptionsEPi - fun:_ZN4base13LaunchProcessERK11CommandLineRKNS_13LaunchOptionsEPi - fun:_ZN21ServiceProcessControl8Launcher5DoRunEv -} -{ - bug_93730_c - Memcheck:Leak - fun:_Znw* - fun:_Z17NewRunnableMethodIN21ServiceProcessControl8LauncherEMS1_FvvEEP14CancelableTaskPT_T0_ - fun:_ZN21ServiceProcessControl8Launcher5DoRunEv -} -{ - bug_93730_d - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEPN4base16MessageLoopProxyEbPNS8_13WaitableEventE - fun:_ZN16ServiceIPCServer13CreateChannelEv - fun:_ZN16ServiceIPCServer4InitEv - fun:_ZN14ServiceProcess10InitializeEP16MessageLoopForUIRK11CommandLineP19ServiceProcessState - fun:_Z18ServiceProcessMainRK18MainFunctionParams - ... - fun:ChromeMain - fun:main -} -{ - bug_94195 - Memcheck:Leak - ... - fun:_ZN12GpuBlacklist16LoadGpuBlacklistERKSsNS_8OsFilterE -} -{ - bug_94345 - Memcheck:Leak - fun:_Znw* - fun:_ZNK4base8internal18WeakReferenceOwner6GetRefEv - fun:_ZN4base15SupportsWeakPtrI16ObserverListBaseIN11MessageLoop12TaskObserverEEE9AsWeakPtrEv - fun:_ZN16ObserverListBaseIN11MessageLoop12TaskObserverEE8IteratorC1ERS2_ -} -{ - bug_94764 - Memcheck:Leak - fun:_Znw* - fun:_ZN8remoting13ClientSession11UnpressKeysEv - fun:_ZN8remoting34ClientSessionTest_UnpressKeys_Test8TestBodyEv -} -{ - bug_95448 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsPN4base5ValueEEEE8allocateEjPKv - fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE14_M_create_nodeERKS5_ - fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE10_M_insert_EPKSt18_Rb_tree_node_baseSE_RKS5_ - fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4base5ValueEESt10_Select1stIS5_ESt4lessISsESaIS5_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS5_ERKS5_ - fun:_ZNSt3mapISsPN4base5ValueESt4lessISsESaISt4pairIKSsS2_EEE6insertESt17_Rb_tree_iteratorIS7_ERKS7_ - fun:_ZNSt3mapISsPN4base5ValueESt4lessISsESaISt4pairIKSsS2_EEEixERS6_ - fun:_ZN4base15DictionaryValue23SetWithoutPathExpansionERKSsPNS_5ValueE - fun:_ZN4base15DictionaryValue3SetERKSsPNS_5ValueE - fun:_ZN4base15DictionaryValue9SetStringERKSsRKSbItNS_20string16_char_traitsESaItEE - fun:_ZN11PluginPrefs23CreatePluginFileSummaryERKN6webkit13WebPluginInfoE - fun:_ZN11PluginPrefs19OnUpdatePreferencesESt6vectorIN6webkit13WebPluginInfoESaIS2_EES0_INS1_5npapi11PluginGroupESaIS6_EE -} -{ - bug_95902 - Memcheck:Leak - ... - fun:xdg_mime_init - fun:xdg_mime_get_mime_type_from_file_name - fun:*GetFileMimeTypeE* - fun:_ZNK3net16PlatformMimeUtil32GetPlatformMimeTypeFromExtensionERKSsPSs - fun:_ZNK3net8MimeUtil30GetMimeTypeFromExtensionHelperERKSsbPSs - fun:_ZNK3net8MimeUtil24GetMimeTypeFromExtensionERKSsPSs - fun:_ZNK3net8MimeUtil19GetMimeTypeFromFileE* - fun:_ZN3net19GetMimeTypeFromFileE* -} -{ - bug_96069 - Memcheck:Leak - fun:_Znw* - fun:_ZN3net9HttpCache13CreateBackendEPPN10disk_cache7BackendEP14CallbackRunnerI6Tuple1IiEE - fun:_ZN3net9HttpCache17CreateTransactionEP10scoped_ptrINS_15HttpTransactionEE - ... - fun:_ZN3net13CookieMonster17CookieMonsterTask14InvokeCallbackEN4base8CallbackIFvvEEE -} -{ - bug_96369 - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slice_alloc0 - fun:g_type_create_instance - fun:g_object_constructor - fun:g_object_newv - fun:g_object_new - fun:_gdk_window_impl_new - fun:gdk_window_ensure_native - fun:gdk_x11_drawable_get_xid - fun:_ZN20GtkNativeViewManager14GetIdForWidgetEP10_GtkWidget - fun:_ZNK7content23RenderWidgetHostViewGtk15GetNativeViewIdEv -} -{ - bug_96402 - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slice_alloc0 - fun:g_type_create_instance - fun:g_object_constructor - fun:g_object_newv - fun:g_object_new - fun:_gdk_window_impl_new - fun:gdk_window_ensure_native - fun:gdk_x11_drawable_get_xid - ... - fun:g_closure_invoke - fun:signal_emit_unlocked_R - fun:g_signal_emit_valist - fun:g_signal_emit - fun:gtk_widget_realize - fun:gtk_widget_set_parent -} -{ - bug_96407 - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slice_alloc0 - fun:g_type_create_instance - fun:g_object_constructor - fun:g_object_newv - fun:g_object_new - fun:_gdk_window_impl_new - fun:gdk_window_ensure_native - fun:gdk_x11_drawable_get_xid - fun:_ZN19TestWebViewDelegate20CreatePluginDelegateE* -} -{ - bug_96568a - Memcheck:Leak - fun:*alloc - ... - fun:HB_OpenType* - ... - fun:HB_ShapeItem - fun:_ZN7WebCore21ComplexTextController11shapeGlyphsEv - fun:_ZN7WebCore21ComplexTextController13nextScriptRunEv -} -{ - bug_96568b - Memcheck:Leak - ... - fun:HB_NewFace - fun:_ZN7WebCoreL21getCachedHarfbuzzFaceEPNS_16FontPlatformDataE - fun:_ZN7WebCore12HarfbuzzFaceC1EPNS_16FontPlatformDataE - fun:_ZN7WebCore12HarfbuzzFace6createEPNS_16FontPlatformDataE - fun:_ZNK7WebCore16FontPlatformData12harfbuzzFaceEv - fun:_ZN7WebCore21ComplexTextController21setupFontForScriptRunEv -} -{ - bug_98568 - Memcheck:Leak - ... - fun:_ZN44WebDragDestGtkTest_NoTabContentsWrapper_Test8TestBodyEv -} -{ - bug_98867 - Memcheck:Jump - obj:* - obj:* - obj:* -} -{ - bug_99304 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN2v88internal10PagedSpace11AllocateRawEi - fun:_ZN2v88internal12Deserializer8AllocateEiPNS0_5SpaceEi - fun:_ZN2v88internal12Deserializer10ReadObjectEiPNS0_5SpaceEPPNS0_6ObjectE - fun:_ZN2v88internal12Deserializer9ReadChunkEPPNS0_6ObjectES4_iPh - fun:_ZN2v88internal12Deserializer10ReadObjectEiPNS0_5SpaceEPPNS0_6ObjectE - fun:_ZN2v88internal12Deserializer9ReadChunkEPPNS0_6ObjectES4_iPh - fun:_ZN2v88internal12Deserializer13VisitPointersEPPNS0_6ObjectES4_ -} -{ - bug_99307 - Memcheck:Uninitialized - fun:modp_b64_encode - fun:_ZN4base12Base64Encode* - fun:_ZN11web_ui_util15GetImageDataUrlERK8SkBitmap - fun:_ZN12_GLOBAL__N_121NetworkInfoDictionary8set_iconERK8SkBitmap -} -{ - bug_99308 - Memcheck:Leak - fun:malloc - fun:_ZL9toCStringRK9_NPString - fun:_ZL15testPostURLFileP12PluginObjectPK10_NPVariantjPS1_ - fun:_ZL12pluginInvokeP8NPObjectPvPK10_NPVariantjPS2_ - fun:_ZN7WebCoreL18npObjectInvokeImplERKN2v89ArgumentsENS_18InvokeFunctionTypeE -} -{ - bug_99321 - Memcheck:Leak - fun:_Znw* - fun:_ZN5blink12CCThreadImpl6createEPNS_9WebThreadE - fun:_ZN5blink13WebCompositor9setThreadEPNS_9WebThreadE - fun:_ZN11WebViewHostC1EP9TestShell - fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgent -} -{ - bug_99435 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE - fun:_ZN4base11MessageLoop11RunInternalEv - fun:_ZN4base11MessageLoop10RunHandlerEv -} -{ - bug_100043 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIN6webkit13WebPluginInfoEE8allocateEjPKv - ... - fun:_ZNSt6vectorIN6webkit13WebPluginInfoESaIS1* -} -{ - bug_101125a - Memcheck:Uninitialized - ... - fun:_ZN6SkScan12AntiFillPathERK6SkPathRK8SkRegionP9SkBlitterb - fun:_ZN6SkScan12AntiFillPathERK6SkPathRK12SkRasterClipP9SkBlitter - fun:_ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb - fun:_ZN8SkDevice8drawPathERK6SkDrawRK6SkPathRK7SkPaintPK8SkMatrixb - fun:_ZNK6SkDraw14drawTextOnPathEPKcmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZN8SkDevice14drawTextOnPathERK6SkDrawPKvmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZN8SkCanvas14drawTextOnPathEPKvmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE - fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE -} -{ - bug_101125b - Memcheck:Uninitialized - ... - fun:_ZN6SkScan12AntiFillRectERK6SkRectPK8SkRegionP9SkBlitter - fun:_ZN6SkScan12AntiFillRectERK6SkRectRK12SkRasterClipP9SkBlitter - fun:_ZNK6SkDraw8drawRectERK6SkRectRK7SkPaint - fun:_ZN8SkDevice8drawRectERK6SkDrawRK6SkRectRK7SkPaint - fun:_ZN8SkCanvas8drawRectERK6SkRectRK7SkPaint - fun:_ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceE - fun:_ZN7WebCore15GraphicsContext20drawHighlightForTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEiRKNS_5ColorENS_10ColorSpaceEii -} -{ - bug_101125c - Memcheck:Uninitialized - ... - fun:_ZL11morphpointsP7SkPointPKS_iR13SkPathMeasureRK8SkMatrix - fun:_ZL9morphpathP6SkPathRKS_R13SkPathMeasureRK8SkMatrix - fun:_ZNK6SkDraw14drawTextOnPathEPKcmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZN8SkDevice14drawTextOnPathERK6SkDrawPKvmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZN8SkCanvas14drawTextOnPathEPKvmRK6SkPathPK8SkMatrixRK7SkPaint - fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE - fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE - fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEii -} -{ - bug_100133 - Memcheck:Leak - fun:_Znw* - fun:_Z22RecoveryRegisterHelperP22ComponentUpdateServiceP11PrefService -} -{ - bug_100330 - Memcheck:Leak - fun:_Znw* - fun:_ZN25TestingAutomationProvider42NavigateToURLBlockUntilNavigationsCompleteEiRK4GURLiPN3IPC7MessageE -} -{ - bug_100647 - Memcheck:Leak - fun:_Znw* - fun:_ZN18WebResourceService19UpdateResourceCacheERKSs - fun:_ZN18WebResourceService18WebResourceFetcher18OnURLFetchCompleteEPK10URLFetcherRK4GURLRKN3net16URLRequestStatusEiRKSt6vectorISsSaISsEERKSs - fun:_ZN10URLFetcher8Delegate18OnURLFetchCompleteEPKS_ - fun:_ZN10URLFetcher4Core29InformDelegateFetchIsCompleteEv - fun:_ZN10URLFetcher4Core21OnCompletedURLRequestEN4base9TimeDeltaE -} -{ - bug_100777 - Memcheck:Leak - fun:_Znw* - fun:_ZN12_GLOBAL__N_119MakeContextDelegateI16CrxUpdateServiceNS1_13UpdateContextEEEPN7content18URLFetcherDelegateEPT_PT0_ - fun:_ZN16CrxUpdateService19ProcessPendingItemsEv -} -{ - bug_100916 - Memcheck:Leak - fun:_Znw* - fun:_ZN5blink19WebWorkerClientImpl24createWorkerContextProxyEPN7WebCore6WorkerE - ... - fun:_ZN7WebCore6WorkerC1EPNS_22ScriptExecutionContextE - fun:_ZN7WebCore6Worker6createEPNS_22ScriptExecutionContextERKN3WTF6StringERi - fun:_ZN7WebCore8V8Worker19constructorCallbackERKN2v89ArgumentsE - fun:_ZN2v88internalL19HandleApiCallHelperILb1EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_100982 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore12RenderRegion22setRenderBoxRegionInfoEPKNS_9RenderBoxEiib - fun:_ZNK7WebCore9RenderBox19renderBoxRegionInfoEPNS_12RenderRegionEiNS0_24RenderBoxRegionInfoFlagsE - ... - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE -} -{ - bug_101145b - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN*WebCore16V8StringResourceILNS_20V8StringResourceMode* -} -{ - bug_101145c - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore*makeExternalString* - ... - fun:_ZN7WebCore11StringCache20v8ExternalStringSlow* - fun:_ZN7WebCore11StringCache16v8ExternalStringEPN* -} -{ - bug_101145d - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore*makeExternalString* - ... - fun:_ZN7WebCore11StringCache28setReturnValueFromStringSlow* - fun:_ZN7WebCore11StringCache24setReturnValueFromString* -} -{ - bug_101146d - Memcheck:Leak - fun:_Znw* - fun:_ZN11webkit_glue16WebURLLoaderImplC1EPNS_25WebKitPlatformSupportImplE - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl15createURLLoaderEv -} -{ - bug_101151 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF*StringEEET_* - fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF*StringEEET_* - fun:_ZN7WebCore15V8ParameterBasecvN3WTF*StringEEv - ... - fun:_ZN2v88internalL*HandleApiCall* - obj:* -} -{ - bug_101159 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore15NPObjectWrapper10NPAllocateEP4_NPPP7NPClass - fun:_NPN_CreateObject - fun:_ZN7WebCore15NPObjectWrapper6createEP8NPObject - fun:_ZN7WebCore16ScriptController20windowScriptNPObjectEv - fun:_ZNK6WebKit12WebFrameImpl12windowObjectEv - fun:_ZN6webkit5npapi13WebPluginImpl23GetWindowScriptNPObjectEv - fun:NPN_GetValue -} -{ - bug_101345 - Memcheck:Leak - fun:_Znw* - fun:_ZN22WebPluginDelegateProxy20CreateResourceClientEmRK4GURLi - fun:_ZN6webkit5npapi13WebPluginImpl24HandleURLRequestInternalEPKcS3_S3_S3_jibNS1_8ReferrerEbb -} -{ - bug_101347 - Memcheck:Leak - fun:_Znw* - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE17NewCallbackHelperINS5_11Dispatcher1IMS3_FviRKNS1_12HostResourceEES8_EEEENS_18CompletionCallbackERKT_ - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE11NewCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_ - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE19NewOptionalCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_ - fun:_ZN5ppapi5proxy38EnterHostFromHostResourceForceCallbackINS_5thunk18PPB_Graphics2D_APIEEC1IN2pp25CompletionCallbackFactoryINS0_20PPB_Graphics2D_ProxyENS0_26ProxyNonThreadSafeRefCountEEEMS8_FviRKNS_12HostResourceEESB_EESD_RT_T0_RKT1_ - fun:_ZN5ppapi5proxy20PPB_Graphics2D_Proxy10OnMsgFlushERKNS_12HostResourceE -} -{ - bug_101470 - Memcheck:Param - write(buf) - obj:/lib/x86_64-linux-gnu/libc-2.15.so - ... - fun:new_do_write - ... - fun:_ZNK13safe_browsing9PrefixSet9WriteFileE* -} -{ - bug_101750 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEj - fun:_ZN3WTF7HashSetIPN7WebCore16SVGStyledElementENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEEnwEj - fun:_ZN7WebCore21SVGDocumentExtensions18addPendingResourceERKN3WTF12AtomicStringEPNS_16SVGStyledElementE -} -{ - bug_101751 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore14SVGFontElement6createERKNS_13QualifiedNameEPNS_8DocumentE - fun:_ZN7WebCoreL15fontConstructorERKNS_13QualifiedNameEPNS_8DocumentEb - fun:_ZN7WebCore17SVGElementFactory16createSVGElementERKNS_13QualifiedNameEPNS_8DocumentEb - fun:_ZN7WebCore8Document13createElementERKNS_13QualifiedNameEb -} -{ - bug_101781 - Memcheck:Uninitialized - fun:encode_one_block - fun:encode_mcu_huff - fun:compress_data - fun:process_data_simple_main - fun:chromium_jpeg_write_scanlines - fun:_ZN3gfx9JPEGCodec6EncodeEPKhNS0_11ColorFormatEiiiiPSt6vectorIhSaIhEE - fun:_ZN3gfx24JPEGEncodedDataFromImageERKNS_5ImageE?PSt6vectorIhSaIhEE - fun:_ZN7history8TopSites12EncodeBitmapE*N3gfx5ImageEP13scoped_refptrIN4base15RefCountedBytesEE - fun:_ZN7history8TopSites16SetPageThumbnailERK4GURL*N3gfx5ImageERK14ThumbnailScore - fun:_ZN7history17ExpireHistoryTest14AddExampleDataEP?PN4base4TimeE - fun:_ZN7history*ExpireHistoryTest_* -} -{ - bug_101781_d - Memcheck:Uninitialized - fun:_ZN7testing8internal11CmpHelperGEIddEENS_15AssertionResultEPKcS4_RKT_RKT0_ - fun:_ZN3gfx31JPEGCodec_EncodeDecodeRGBA_Test8TestBodyEv -} -{ - bug_102257 - Memcheck:Uninitialized - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb -} -{ - bug_102327a - Memcheck:Leak - fun:_Znw* - fun:_ZN15tracked_objects10ThreadData10InitializeEv - fun:_ZN15tracked_objects10ThreadData30InitializeAndSetTrackingStatusEb - fun:_ZN15tracked_objects10ThreadData29ShutdownSingleThreadedCleanupEb -} -{ - bug_102327b - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKPKN15tracked_objects6BirthsENS3_9DeathDataEEEE8allocateE* - ... - fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEE6insertESt17_Rb_tree_iteratorIS9_ERKS9_ - fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_ - fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6Births* - fun:_ZN15tracked_objects10ThreadData3?TallyRun*IfTrackingE* -} -{ - bug_102327c - Memcheck:Leak - fun:_Znw* - fun:_ZN15tracked_objects10ThreadData11TallyABirthERKNS_8LocationE - fun:_ZN15tracked_objects10ThreadData19TallyABirthIfActiveERKNS_8LocationE -} -{ - bug_102327d - Memcheck:Uninitialized - fun:_ZN15tracked_objects9DeathData11RecordDeathEiii - fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEii - fun:_ZN15tracked_objects10ThreadData31TallyRunOnNamedThreadIfTrackingERKN4base12TrackingInfoERKNS_11TrackedTimeES7_ -} -{ - Intentional leak of stl map during thread cleanup in profiler - Memcheck:Leak - fun:_Znw* - fun:_ZNK15tracked_objects10ThreadData26OnThreadTerminationCleanupEv -} -{ - bug_102614 - Memcheck:Leak - fun:_Znw* - fun:_ZN12*FinishPepperFlashUpdateRegistrationEP22ComponentUpdateServiceRK7Version -} -{ - bug_102831_a - Memcheck:Leak - ... - fun:_ZN17PluginLoaderPosix19LoadPluginsInternalEv -} -{ - bug_104447 - Memcheck:Leak - ... - fun:HB_OpenTypeShape - fun:arabicSyriacOpenTypeShape - fun:HB_ArabicShape - fun:HB_ShapeItem - fun:_ZN7WebCore21ComplexTextController11shapeGlyphsEv - fun:_ZN7WebCore21ComplexTextController13nextScriptRunEv - fun:_ZN7WebCore21ComplexTextController14widthOfFullRunEv - fun:_ZNK7WebCore4Font24floatWidthForComplexTextERKNS_7TextRunEPN3WTF7HashSetIPKNS_14SimpleFontDataENS4_7PtrHashIS8_EENS4_10HashTraitsIS8_EEEEPNS_13GlyphOverflowE - fun:_ZNK7WebCore4Font5widthERKNS_7TextRunERiRN3WTF6StringE - fun:_ZN7WebCore14SVGTextMetricsC1EPNS_19RenderSVGInlineTextERKNS_7TextRunE - fun:_ZN7WebCore14SVGTextMetrics21measureCharacterRangeEPNS_19RenderSVGInlineTextEjj - fun:_ZNK7WebCore30SVGTextLayoutAttributesBuilder25propagateLayoutAttributesEPNS_12RenderObjectERN3WTF6VectorINS_23SVGTextLayoutAttributesELm0EEERjRt -} -{ - # ProcessSingleton::LinuxWatcher is marked DeleteOnIOThread. Sometimes it - # leaks on shutdown instead of getting deleted. The destructor doesn't do - # anything important, so this shouldn't be a big deal. - bug_104578 - Memcheck:Leak - fun:_Znw* - fun:_ZN16ProcessSingletonC1E* - fun:_ZN22ChromeProcessSingletonC1E* -} -{ - bug_104806_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN15tracked_objects10ThreadData19TallyABirthIfActiveERKNS_8LocationE - fun:_ZN4base12TrackingInfoC?ERKN15tracked_objects8LocationENS_9TimeTicksE -} -{ - bug_104806_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_ - fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEii - fun:_ZN15tracked_objects10ThreadData32TallyRunOnWorkerThreadIfTrackingEPKNS_6BirthsERKNS_11TrackedTimeES6_S6_ -} -{ - bug_105715 - Memcheck:Uninitialized - ... - fun:vfprintf - fun:__vsnprintf_chk - fun:_ZN4base9vsnprintfEPcjPKcS0_ - fun:_ZN4base12_GLOBAL__N_110vsnprintfTEPcjPKcS1_ - fun:_ZN4base12_GLOBAL__N_1L14StringAppendVTISsEEvPT_PKNS2_10value_typeEPc - fun:_ZN4base13StringAppendVEPSsPKcPc - fun:_ZN4base13StringAppendFEPSsPKcz - fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb - fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb - fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb - fun:_ZN4base10JSONWriter15BuildJSONStringEPKNS_5ValueEibb - fun:_ZN4base10JSONWriter16WriteWithOptionsEPKNS_5ValueEbiPSs - fun:_ZN25JSONStringValueSerializer17SerializeInternalERKN4base5ValueEb - fun:_ZN25JSONStringValueSerializer9SerializeERKN4base5ValueE - fun:_ZN18jstemplate_builder12AppendJsonJSEPKN4base15DictionaryValueEPSs - fun:_ZN19OptionsUIHTMLSource16StartDataRequestERKSsbi - fun:_ZN4base8internal15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEE3RunEPS3_S5_RKbRKi - fun:_ZN4base8internal12InvokeHelperILb0EvNS0_15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEEEFvRKPS4_S6_RKbRKiEE8MakeItSoES9_SC_S6_SE_SG_ - fun:_ZN4base8internal7InvokerILi4ENS0_9BindStateINS0_15RunnableAdapterIMN20ChromeURLDataManager10DataSourceEFvRKSsbiEEEFvPS5_S7_biEFvSB_SsbiEEESC_E3RunEPNS0_13BindStateBaseE - fun:_ZNK4base8CallbackIFvvEE3RunEv -} -{ - bug_105744b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZNSt6vector*9push_back* - fun:_ZN4skia19ConvolutionFilter1D9AddFilterEiPKsi - fun:_ZN4skia12_GLOBAL__N_112ResizeFilter14ComputeFiltersEiiiffPNS_19ConvolutionFilter1DE - fun:_ZN4skia12_GLOBAL__N_112ResizeFilterC1ENS_15ImageOperations12ResizeMethodEiiiiRK7SkIRect - fun:_ZN4skia15ImageOperations11ResizeBasicERK8SkBitmapNS0_12ResizeMethodEiiRK7SkIRect - fun:_ZN4skia15ImageOperations6ResizeERK8SkBitmapNS0_12ResizeMethodEiiRK7SkIRect - fun:_ZN4skia15ImageOperations6ResizeERK8SkBitmapNS0_12ResizeMethodEii - fun:_ZN24ChromeRenderViewObserver21CaptureFrameThumbnailEPN5blink7WebViewEiiP8SkBitmapP14ThumbnailScore - fun:_ZN24ChromeRenderViewObserver16CaptureThumbnailEv - fun:_ZN24ChromeRenderViewObserver15CapturePageInfoEib -} -{ - bug_105907 - Memcheck:Uninitialized - ... - fun:_ZN4skia14BGRAConvolve2DEPKhibRKNS_19ConvolutionFilter1DES4_iPhb - fun:_ZN4skia15ImageOperations11ResizeBasicE* - fun:_ZN4skia15ImageOperations6ResizeE* -} -{ - bug_106183a - Memcheck:Uninitialized - fun:_ZN7WebCore13RenderMarquee18updateMarqueeStyleEv - fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore20RenderBoxModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore11RenderBlock14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore12RenderObject8setStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE -} -{ - bug_106183b - Memcheck:Uninitialized - fun:_ZN7WebCore21ComplexTextController* - ... - fun:_ZNK7WebCore4Font27selectionRectForComplexTextERKNS_7TextRunERKNS_10FloatPointEiii - fun:_ZNK7WebCore4Font20selectionRectForTextERKNS_7TextRunERKNS_10FloatPointEiii - fun:_ZNK7WebCore13InlineTextBox17positionForOffsetEi - fun:_ZN7WebCore10RenderText14localCaretRectEPNS_9InlineBoxEiPi - fun:_ZNK7WebCore15VisiblePosition14localCaretRectERPNS_12RenderObjectE - fun:_ZN7WebCore9CaretBase15updateCaretRectEPNS_8DocumentERKNS_15VisiblePositionE - fun:_ZN7WebCore14FrameSelection14localCaretRectEv - fun:_ZN7WebCore14FrameSelection18recomputeCaretRectEv - fun:_ZN7WebCore14FrameSelection16updateAppearanceEv -} -{ - bug_106183c - Memcheck:Uninitialized - fun:_ZN7WebCore21ComplexTextController* - ... - fun:_ZNK7WebCore4Font15drawComplexTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZN7WebCoreL20paintTextWithShadowsEPNS_15GraphicsContextERKNS_4FontERKNS_7TextRunERKN3WTF12AtomicStringEiiiiRKNS_10FloatPointERKNS_9FloatRectEPKNS_10ShadowDataEbb - ... - fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE -} -{ - bug_106402 - Memcheck:Leak - fun:_Znw* - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE17NewCallbackHelperINS5_11Dispatcher1IMS3_FviRKNS1_12HostResourceEES8_EEEENS_18CompletionCallbackERKT_ - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE11NewCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_ - fun:_ZN2pp25CompletionCallbackFactoryIN5ppapi5proxy20PPB_Graphics2D_ProxyENS2_26ProxyNonThreadSafeRefCountEE19NewOptionalCallbackIMS3_FviRKNS1_12HostResourceEES7_EENS_18CompletionCallbackET_RKT0_ - fun:_ZN5ppapi5proxy38EnterHostFromHostResourceForceCallbackINS_5thunk18PPB_Graphics2D_APIEEC1IN2pp25CompletionCallbackFactoryINS0_20PPB_Graphics2D_ProxyENS0_26ProxyNonThreadSafeRefCountEEEMS8_FviRKNS_12HostResourceEESB_EESD_RT_T0_RKT1_ - fun:_ZN5ppapi5proxy20PPB_Graphics2D_Proxy14OnHostMsgFlushERKNS_12HostResourceE -} -{ - bug_106552 - Memcheck:Uninitialized - ... - fun:_ZN25JSONStringValueSerializer17SerializeInternalERKN4base5ValueEb - fun:_ZN25JSONStringValueSerializer9SerializeERKN4base5ValueE - fun:_ZN13JsonPrefStore13SerializeDataEPSs - fun:_ZN19ImportantFileWriter16DoScheduledWriteEv - fun:_ZN13JsonPrefStore18CommitPendingWriteEv - fun:_ZN13JsonPrefStoreD0Ev - fun:_ZNK4base10RefCountedI9PrefStoreE7ReleaseEv - fun:_ZN13scoped_refptrI19PersistentPrefStoreEaSEPS0_ - fun:_ZN11PrefServiceD0Ev - fun:_ZN10scoped_ptrI11PrefServiceED1Ev - fun:_ZN14TestingProfileD2Ev - fun:_ZN23ExtensionTestingProfileD0Ev -} -{ - bug_106912 - Memcheck:Leak - fun:_Znw* - fun:_ZN15tracked_objects10ThreadData23InitializeThreadContextERKSs - fun:_ZN4base14PlatformThread7SetNameEPKc -} -{ - bug_107696 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11iBeamCursorEv - fun:_ZN7WebCore12EventHandler12selectCursorERKNS_28MouseEventWithHitTestResultsEPNS_9ScrollbarE - fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb - fun:_ZN7WebCore12EventHandler10mouseMovedERKNS_18PlatformMouseEventEb - fun:_ZN5blink11WebViewImpl9mouseMoveERKNS_13WebMouseEventE - fun:_ZN5blink11WebViewImpl16handleInputEventERKNS_13WebInputEventE - fun:_ZN12RenderWidget18OnHandleInputEventERKN3IPC7MessageE -} -{ - bug_108146a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN5ppapi5proxy26PPP_Instance_Private_Proxy22OnMsgGetInstanceObjectEiNS0_24SerializedVarReturnValueE -} -{ - bug_108146b - Memcheck:Param - write(buf) - obj:/lib/tls/i686/cmov/libpthread-2.11.1.so - fun:_ZN3IPC7Channel11ChannelImpl4SendEPNS_7MessageE - fun:_ZN3IPC7Channel4SendEPNS_7MessageE - fun:_ZN3IPC12ChannelProxy7Context13OnSendMessageEPNS_7MessageE - fun:_ZN3IPC18SendCallbackHelper4SendEv -} -{ - bug_108147 - Memcheck:Uninitialized - ... - fun:_ZNK6SkDraw11drawPosTextEPKcmPKffiRK7SkPaint - fun:_ZN8SkDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint - fun:_ZN8SkCanvas11drawPosTextEPKvmPK7SkPointRK7SkPaint - fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE - fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE - fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii -} -{ - bug_108620 - Memcheck:Uninitialized - fun:_ZN7WebCore13PlatformEventC2ENS0_4TypeEbbbbd - fun:_ZN7WebCore18PlatformMouseEventC1ERKNS_8IntPointES3_NS_11MouseButtonENS_13PlatformEvent4TypeEibbbbd - fun:_ZN7WebCore12EventHandler28fakeMouseMoveEventTimerFiredEPNS_5TimerIS0_EE - fun:_ZN7WebCore5TimerINS_12EventHandlerEE5firedEv - fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv - fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv - fun:_ZN4base9BaseTimerIN11webkit_glue25WebKitPlatformSupportImplELb0EE9TimerTask3RunEv -} -{ - bug_108621 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore5EventEEnwEm - fun:_ZN7WebCore12MessageEvent6createEN3WTF10PassOwnPtrINS1_6VectorINS1_6RefPtrINS_11MessagePortEEELm1EEEEENS1_10PassRefPtrINS_21SerializedScriptValueEEERKNS1_6StringESE_NS9_INS_9DOMWindowEEE - fun:_ZN7WebCore16PostMessageTimer5eventEPNS_22ScriptExecutionContextE - fun:_ZN7WebCore9DOMWindow21postMessageTimerFiredEN3WTF10PassOwnPtrINS_16PostMessageTimerEEE - fun:_ZN7WebCore16PostMessageTimer5firedEv - fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv - fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv - fun:_ZN4base9BaseTimerIN11webkit_glue25WebKitPlatformSupportImplELb0EE9TimerTask3RunEv -} -{ - bug_108622 - Memcheck:Leak - fun:_Zna* - fun:_ZN2v88internal8NewArrayIhEEPT* - fun:_ZN2v88internal11RegExpStack14EnsureCapacityEm - fun:_ZN2v88internal16RegExpStackScopeC1EPNS0_7IsolateE - fun:_ZN2v88internal26NativeRegExpMacroAssembler7ExecuteEPNS0_4CodeEPNS0_6String* - fun:_ZN2v88internal26NativeRegExpMacroAssembler5MatchENS0_6HandleINS0_4CodeEEENS2_INS0_6StringEEEPiiiPNS0_7IsolateE - fun:_ZN2v88internal10RegExpImpl*IrregexpExec*ENS0_6HandleINS0_8JSRegExpEEENS2_INS0_6StringEEEiPii -} -{ - bug_108624 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF6StringEEET_v - fun:_ZN7WebCore15V8ParameterBasecvN3WTF6StringEEv - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb - fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE - fun:_ZN7WebCore28V8WorkerContextEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE - fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE - fun:_ZN7WebCore28V8WorkerContextEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE - fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE -} -{ - bug_108624a - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN7WebCore15V8ParameterBase8toStringIN3WTF6StringEEET_v - fun:_ZN7WebCore15V8ParameterBasecvN3WTF6StringEEv - fun:_ZN7WebCore25WebKitBlobBuilderInternal* -} -{ - bug_108628 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN*7WebCore16V8StringResourceILNS_20V8StringResourceModeE0EE8toStringIN3WTF12AtomicStringEEET_v - fun:_ZN*7WebCore16V8StringResourceILNS_20V8StringResourceModeE0EEcvN3WTF12AtomicStringEEv - ... - fun:_ZN7WebCore24XMLHttpRequestV8Internal* - ... - fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_109495e - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3gpu5gles219VertexAttribManager16VertexAttribInfoEEE8allocateEmPKv - fun:_ZNSt10_List_baseIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE11_M_get_nodeEv - fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE14_M_create_nodeERKS4_ - fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE6insertESt14_List_iteratorIS4_ERKS4_ - fun:_ZN3gpu5gles219VertexAttribManager16VertexAttribInfo7SetListEPSt4listIPS2_SaIS4_EE - fun:_ZN3gpu5gles219VertexAttribManager10InitializeEj - fun:_ZN3gpu5gles216GLES2DecoderImpl10Initialize* - fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ -} -{ - bug_109495f - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ - fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE - fun:_ZN7WebCore17GraphicsContext3D6createENS0_10AttributesEPNS_10HostWindowENS0_11RenderStyleE - fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE - fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE - fun:_ZN7WebCore19V8HTMLCanvasElement18getContextCallbackERKN2v89ArgumentsE -} -{ - bug_109496 - Memcheck:Uninitialized - ... - fun:_ZN7WebCore11ImageBuffer27platformTransformColorSpaceERKN3WTF6VectorIiLm0EEE - fun:_ZN7WebCore11ImageBuffer19transformColorSpaceENS_10ColorSpaceES1_ - fun:_ZN7WebCore23RenderSVGResourceFilter17postApplyResourceEPNS_12RenderObjectERPNS_15GraphicsContextEtPKNS_4PathEPKNS_14RenderSVGShapeE - ... - fun:_ZN7WebCore14RenderSVGShape5paintERNS_9PaintInfoERKNS_* - ... - fun:_ZN7WebCore13RenderSVGRoot*paint*PaintInfoERKNS_* -} -{ - bug_109872 - Memcheck:Leak - fun:_Znw* - fun:_ZN18BrowserProcessImpl29ResourceDispatcherHostCreatedEv - fun:_ZN6chrome26ChromeContentBrowserClient29ResourceDispatcherHostCreatedEv - fun:_ZN22ResourceDispatcherHost* - ... - fun:_ZN7content15BrowserMainLoop21BrowserThreadsStartedEv - fun:_ZN7content15BrowserMainLoop* - ... - fun:_Z11BrowserMainRKN7content18MainFunctionParamsE -} -{ - bug_110734 - Memcheck:Leak - fun:_Znw* - fun:_ZN15StartupTimeBomb3ArmERKN4base9TimeDeltaE - fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv -} -{ - bug_111186 - Memcheck:Leak - fun:_Znw* - fun:_ZN11leveldb_*ChromiumEnv11StartThread* - fun:_ZN11leveldb_*ChromiumEnv8Schedule* - fun:_ZN7leveldb6DBImpl23MaybeScheduleCompactionEv - fun:_ZN7leveldb6DBImpl16MakeRoomForWriteEb - fun:_ZN7leveldb6DBImpl5WriteERKNS_12WriteOptionsEPNS_10WriteBatchE - fun:_ZN17LeveldbValueStore9WriteToDbEPN7leveldb10WriteBatchE - fun:_ZN17LeveldbValueStore3SetEiRKSsRKN4base5ValueE - fun:_ZN10extensions28SettingsStorageQuotaEnforcer3SetEiRKSsRKN4base5ValueE - fun:_ZN10extensions23SyncableSettingsStorage3SetEiRKSsRKN4base5ValueE -} -{ - bug_111341 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN7WebCore17ClipboardChromiumnwEm - fun:_ZN7WebCore17ClipboardChromium6createENS_9Clipboard13ClipboardTypeEN3WTF10PassRefPtrINS_18ChromiumDataObjectEEENS_21ClipboardAccessPolicyEPNS_5FrameE -} -{ - bug_111669 - Memcheck:Leak - fun:_Znw* - fun:_ZN8appcache17AppCacheDiskCache10ActiveCall17OnAsyncCompletionEi -} -{ - bug_112278 - Memcheck:Uninitialized - fun:fetch_texel_2d_f_rgba8888 - fun:sample_2d_linear - fun:sample_linear_2d - fun:fetch_texel_lod - fun:fetch_texel - fun:_mesa_execute_program - fun:run_program - fun:_swrast_exec_fragment_program - fun:shade_texture_span - fun:_swrast_write_rgba_span - fun:general_triangle - fun:_swrast_validate_triangle - fun:_swrast_Triangle - fun:triangle_rgba - fun:_tnl_render_triangles_elts - fun:run_render - fun:_tnl_run_pipeline - fun:_tnl_draw_prims - fun:_tnl_vbo_draw_prims - fun:vbo_validated_drawrangeelements - fun:vbo_exec_DrawElements - fun:neutral_DrawElements -} -{ - bug_112278b - Memcheck:Uninitialized - fun:fetch_texel_2d_f_rgba8888 - fun:sample_2d_nearest - fun:sample_nearest_2d - fun:fetch_texel_lod - fun:fetch_texel - fun:_mesa_execute_program - fun:run_program - fun:_swrast_exec_fragment_program - fun:shade_texture_span - fun:_swrast_write_rgba_span - fun:general_triangle - ... - fun:_swrast_Triangle - fun:triangle_rgba - ... - fun:run_render - fun:_tnl_run_pipeline - fun:_tnl_draw_prims - fun:_tnl_vbo_draw_prims -} -{ - bug_112315 - Memcheck:Leak - fun:_Znw* - fun:_ZN2v88internal21NativeObjectsExplorer18FindOrAddGroupInfoEPKc - ... - fun:_ZN2v88internal21NativeObjectsExplorer27IterateAndExtractReferencesEPNS0_23SnapshotFillerInterfaceE - fun:_ZN2v88internal21HeapSnapshotGenerator25CountEntriesAndReferencesEv - fun:_ZN2v88internal21HeapSnapshotGenerator16GenerateSnapshotEv - fun:_ZN2v88internal12HeapProfiler16TakeSnapshotImplEPKciPNS_15ActivityControlE - ... - fun:_ZN2v88internal12HeapProfiler12TakeSnapshotEPNS0_6StringEiPNS_15ActivityControlE - fun:_ZN2v812HeapProfiler12TakeSnapshotENS_6HandleINS_6StringEEENS_12HeapSnapshot4TypeEPNS_15ActivityControlE - fun:_ZL13GetNumObjectsPKc -} -{ - bug_112450_b - Memcheck:Unaddressable - fun:_ZN7WebCore15PlatformSupport25loadPlatformAudioResourceEPKcd - fun:_ZN7WebCore8AudioBus20loadPlatformResourceEPKcf - fun:_ZN7WebCore13HRTFElevation35calculateKernelsForAzimuthElevationEiifRKN3WTF6StringERNS1_6RefPtrINS_10HRTFKernelEEES8_ - fun:_ZN7WebCore13HRTFElevation16createForSubjectERKN3WTF6StringEif - fun:_ZN7WebCore12HRTFDatabaseC1Ef - fun:_ZN7WebCore12HRTFDatabase6createEf - fun:_ZN7WebCore18HRTFDatabaseLoader4loadEv - fun:_ZN7WebCoreL19databaseLoaderEntryEPv - fun:_ZN3WTFL16threadEntryPointEPv -} -{ - bug_112594_a - Memcheck:Leak - ... - fun:NPP_New - fun:_ZN6webkit5npapi14PluginInstance7NPP_NewEtsPPcS3_ - fun:_ZN6webkit5npapi14PluginInstance5StartERK4GURLPPcS6_ib - fun:_ZN6webkit5npapi21WebPluginDelegateImpl10InitializeERK4GURLRKSt6vectorISsSaISsEES9_PNS0_9WebPluginEb - fun:_ZN6webkit5npapi13WebPluginImpl10initializeEPN5blink18WebPluginContainerE - fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b - fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_ -} -{ - bug_112594_b - Memcheck:Unaddressable - fun:_ZN6webkit5npapi13WebPluginImpl24HandleURLRequestInternalEPKcS3_S3_S3_jibNS1_8ReferrerEbb - fun:_ZN6webkit5npapi13WebPluginImpl16HandleURLRequestEPKcS3_S3_S3_jibb - fun:_ZN6webkit5npapi14PluginInstance10RequestURLEPKcS3_S3_S3_jbPv - fun:GetURLNotify - fun:NPN_GetURLNotify - fun:_ZN10PluginTest16NPN_GetURLNotifyEPKcS1_Pv - fun:_ZN34GetURLNotifyWithURLThatFailsToLoad7NPP_NewEPctsPS0_S1_P12_NPSavedData - fun:NPP_New - fun:_ZN6webkit5npapi14PluginInstance7NPP_NewEtsPPcS3_ - fun:_ZN6webkit5npapi14PluginInstance5StartERK4GURLPPcS6_ib - fun:_ZN6webkit5npapi21WebPluginDelegateImpl10InitializeERK4GURLRKSt6vectorISsSaISsEES9_PNS0_9WebPluginEb - fun:_ZN6webkit5npapi13WebPluginImpl10initializeEPN5blink18WebPluginContainerE - fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b - fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_ -} -{ - bug_112594_c - Memcheck:Unaddressable - fun:_ZN27DocumentOpenInDestroyStream17NPP_DestroyStreamEP9_NPStreams - fun:NPP_DestroyStream - fun:_ZN6webkit5npapi14PluginInstance17NPP_DestroyStreamEP9_NPStreams - fun:_ZN6webkit5npapi12PluginStream5CloseEs - fun:_ZN6webkit5npapi15PluginStreamUrl5CloseEs - fun:_ZN6webkit5npapi15PluginStreamUrl16DidFinishLoadingEv - fun:_ZN6webkit5npapi13WebPluginImpl16didFinishLoadingEPN5blink12WebURLLoaderEd -} -{ - bug_112594_d - Memcheck:Leak - fun:malloc - fun:NPN_MemAlloc - fun:*Enumerate*ObjectPPPvPj - fun:_ZN7WebCore26npObjectPropertyEnumerator*Info* - ... - fun:_ZN2v88internal28Runtime_GetPropertyNamesFast*IsolateE -} -{ - bug_112573 - Memcheck:Leak - fun:_Znw* - fun:_ZN2v88internal2OS15CreateSemaphoreEi - fun:_ZN2v88internal8ProfilerC1EPNS0_7IsolateE - fun:_ZN2v88internal6Logger5SetUpEv - fun:_ZN2v88internal7Isolate4InitEPNS0_12DeserializerE - fun:_ZN2v88internal2V810InitializeEPNS0_12DeserializerE - fun:_ZN2v88internal8Snapshot11DeserializeEPKhi - fun:_ZN2v88internal8Snapshot10InitializeEPKc - fun:_ZN2v8L16InitializeHelperEv - fun:_ZN2v8L27EnsureInitializedForIsolateEPNS_8internal7IsolateEPKc - fun:_ZN2v82V818AddMessageListenerEPFvNS_6HandleINS_7MessageEEENS1_INS_5ValueEEEES5_ - fun:_ZN7WebCore27WorkerContextExecutionProxy19initContextIfNeededEv - fun:_ZN7WebCore27WorkerContextExecutionProxy8evaluateERKN3WTF6StringES4_RKNS1_12TextPositionEPNS_27WorkerContextExecutionStateE - fun:_ZN7WebCore22WorkerScriptController8evaluateERKNS_16ScriptSourceCodeEPNS_11ScriptValueE - fun:_ZN7WebCore22WorkerScriptController8evaluateERKNS_16ScriptSourceCodeE - fun:_ZN7WebCore12WorkerThread12workerThreadEv - fun:_ZN7WebCore12WorkerThread17workerThreadStartEPv - fun:_ZN3WTFL16threadEntryPointEPv -} -{ - bug_112835 - Memcheck:Unaddressable - ... - fun:_ZN5blink31WorkerFileSystemCallbacksBridge4stopEv - fun:_ZN5blink31WorkerFileSystemContextObserver10notifyStopEv - fun:_ZN7WebCore13WorkerContext21notifyObserversOfStopEv - fun:_ZN7WebCore29WorkerThreadShutdownStartTask11performTaskEPNS_22ScriptExecutionContextE - fun:_ZN7WebCore13WorkerRunLoop4Task11performTaskERKS0_PNS_22ScriptExecutionContextE - fun:_ZN7WebCore13WorkerRunLoop15runCleanupTasksEPNS_13WorkerContextE -} -{ - bug_113076 - Memcheck:Uninitialized - fun:_ZN5mediaL19ConvertYUVToRGB32_CEhhhPh - fun:_ZN5media35LinearScaleYUVToRGB32RowWithRange_CEPKhS1_S1_Phiii - fun:_ZN5media23ScaleYUVToRGB32WithRectEPKhS1_S1_Phiiiiiiiiiii -} -{ - bug_115294 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN17AudioRendererHost14OnCreateStreamEiRK15AudioParameters -} -{ - bug_115419_1 - Memcheck:Uninitialized - fun:fetch_texel_2d_f_rgba8888 - fun:texture_get_row - fun:fast_read_rgba_pixels - fun:read_rgba_pixels - fun:_swrast_ReadPixels - fun:_mesa_ReadPixels - fun:glReadPixels - fun:_ZN3gpu5gles216GLES2DecoderImpl16HandleReadPixelsEjRKNS0_10ReadPixelsE - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv - fun:_ZN3gpu12GpuScheduler10PutChangedEv - fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv -} -{ - bug_115419_2 - Memcheck:Uninitialized - fun:get_src_arg_mask - fun:_mesa_remove_extra_move_use - fun:_mesa_optimize_program - fun:_Z16get_mesa_programP14__GLcontextRecP17gl_shader_programP9gl_shader - fun:_mesa_ir_link_shader - fun:_mesa_glsl_link_shader - fun:link_program - fun:_mesa_LinkProgramARB - fun:glLinkProgram - ... - fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgram* - fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgram* - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv - fun:_ZN3gpu12GpuScheduler10PutChangedEv - fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv -} -{ - bug_116475 - Memcheck:Uninitialized - ... - fun:_ZNK4base9Histogram11BucketIndexEi - fun:_ZN4base9Histogram3AddEi - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl21histogramCustomCountsEPKciiii - fun:_ZN7WebCore15PlatformSupport21histogramCustomCountsEPKciiii - fun:_ZN7WebCore19CCLayerTreeHostImpl20optimizeRenderPasses* - fun:_ZN7WebCore19CCLayerTreeHostImpl10drawLayersEv - fun:_ZN7WebCore19CCSingleThreadProxy11doCompositeEv -} -{ - bug_118890_a - Memcheck:Leak - ... - fun:_ZN8notifier18SingleLoginAttemptC1EPNS_13LoginSettingsEPNS0_8DelegateE - fun:_ZN8notifier5Login15StartConnectionEv - fun:_ZN13sync_notifier20InvalidationNotifier17UpdateCredentialsERKSsS2_ -} -{ - bug_118890_b - Memcheck:Leak - fun:_Znw* - fun:_ZN13sync_notifier12_GLOBAL__N_124InvalidationNotifierTest5SetUpEv -} -{ - bug_122177 - Memcheck:Leak - ... - fun:_ZN7history16InMemoryURLIndex23PostSaveToCacheFileTaskEv - fun:_ZN7history16InMemoryURLIndex8ShutDownEv - fun:_ZN14HistoryService13UnloadBackendEv - fun:_ZN14HistoryService7CleanupEv -} -{ - bug_122189 - Memcheck:Leak - fun:_Znw* - fun:_ZN5blink16ChromeClientImpl18createColorChooserEPN7WebCore18ColorChooserClientERKNS1_5ColorE - fun:_ZN7WebCore6Chrome18createColorChooserEPNS_18ColorChooserClientERKNS_5ColorE - fun:_ZN7WebCore14ColorInputType22handleDOMActivateEventEPNS_5EventE - fun:_ZN7WebCore16HTMLInputElement19defaultEventHandlerEPNS_5EventE - fun:_ZN7WebCore15EventDispatcher13dispatchEventEN3WTF10PassRefPtrINS_5EventEEE - fun:_ZNK7WebCore21EventDispatchMediator13dispatchEventEPNS_15EventDispatcherE -} -{ - bug_122192 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ - fun:_ZN14webkit_support23CreateGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesEPNS0_7WebViewEb - fun:_ZN11WebViewHost23createGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE - fun:_ZN5blink11WebViewImpl33createCompositorGraphicsContext3DEv - fun:_ZN5blink11WebViewImpl15createContext3DEv -} -{ - bug_122245a - Memcheck:Uninitialized - ... - fun:_ZN15SkScalerContext15internalGetPathERK7SkGlyphP6SkPathS4_P8SkMatrix - fun:_ZN15SkScalerContext10getMetricsEP7SkGlyph - fun:_ZN12SkGlyphCache13lookupMetricsEjNS_11MetricsTypeE -} -{ - bug_122245b - Memcheck:Uninitialized - ... - fun:_ZNK6SkRect8roundOutEP7SkIRect - fun:_ZN15SkScalerContext10getMetricsEP7SkGlyph - fun:_ZN12SkGlyphCache13lookupMetricsEjNS_11MetricsTypeE - fun:_ZN12SkGlyphCache17getGlyphIDMetricsEt - fun:_ZL22sk_getMetrics_glyph_00P12SkGlyphCachePPKcii - fun:_ZNK6SkDraw11drawPosTextEPKcmPKffiRK7SkPaint - fun:_ZN8SkDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint - fun:_ZN11SkGpuDevice11drawPosTextERK6SkDrawPKvmPKffiRK7SkPaint - fun:_ZN8SkCanvas11drawPosTextEPKvmPK7SkPointRK7SkPaint - fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE - fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE - fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZN7WebCore15GraphicsContext12drawBidiTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPointE - fun:_ZN7WebCore24CanvasRenderingContext2D16drawTextInternalERKN3WTF6StringEffbfb - fun:_ZN7WebCore24CanvasRenderingContext2D10strokeTextERKN3WTF6StringEfff - fun:_ZN7WebCore32CanvasRenderingContext2DInternalL18strokeTextCallbackERKN2v89ArgumentsE - fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE - fun:_ZN2v88internalL21Builtin_HandleApiCallENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_122429 - Memcheck:Leak - fun:_Znw* - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ - fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE - fun:_ZN13TestWebPlugin10initializeEPN5blink18WebPluginContainerE - fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b -} -{ - bug_122431 - Memcheck:Leak - fun:_Znw* - fun:_ZN11WebViewHost12createPluginEPN5blink8WebFrameERKNS0_15WebPluginParamsE - fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6StringELm0EEESF_RKSC_b - fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7_Lm0EEESD_b - fun:_ZN7WebCore14SubframeLoader13requestObjectEPNS_22HTMLPlugInImageElementERKN3WTF6StringERKNS3_12AtomicStringES6_RKNS3_6VectorIS4_Lm0EEESD_ - fun:_ZN7WebCore16HTMLEmbedElement12updateWidgetENS_20PluginCreationOptionE -} -{ - bug_122435a - Memcheck:Leak - fun:_Zna* - fun:_ZN3gpu5gles219VertexAttribManager10InitializeEj - fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContext*SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE - fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ -} -{ - bug_122435b - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3gpu5gles219VertexAttribManager16VertexAttribInfoEEE8allocateEmPKv - fun:_ZNSt10_List_baseIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE11_M_get_nodeEv - fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE14_M_create_nodeERKS4_ - fun:_ZNSt4listIPN3gpu5gles219VertexAttribManager16VertexAttribInfoESaIS4_EE6insertESt14_List_iteratorIS4_ERKS4_ - fun:_ZN3gpu5gles219VertexAttribManager16VertexAttribInfo7SetListEPSt4listIPS2_SaIS4_EE - fun:_ZN3gpu5gles219VertexAttribManager6EnableEjb -} -{ - bug_122436 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEEEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE14_M_create_nodeERKS7_ - fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS7_ - fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE16_M_insert_uniqueERKS7_ - fun:_ZNSt8_Rb_treeIjSt4pairIKj10linked_ptrIN3gpu13CommonDecoder6BucketEEESt10_Select1stIS7_ESt4lessIjESaIS7_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS7_ERKS7_ - fun:_ZNSt3mapIj10linked_ptrIN3gpu13CommonDecoder6BucketEESt4lessIjESaISt4pairIKjS4_EEE6insertESt17_Rb_tree_iteratorIS9_ERKS9_ - fun:_ZNSt3mapIj10linked_ptrIN3gpu13CommonDecoder6BucketEESt4lessIjESaISt4pairIKjS4_EEEixERS8_ - fun:_ZN3gpu13CommonDecoder12CreateBucketEj -} -{ - bug_122437 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3gpu19MappedMemoryManager5Alloc* - fun:_ZN3gpu5gles219GLES2Implementation24MapTexSubImage2DCHROMIUM* - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl24mapTexSubImage2DCHROMIUM* - fun:_ZN7WebCore24GraphicsContext3DPrivate24mapTexSubImage2DCHROMIUM* - fun:_ZN7WebCore20Extensions3DChromium24mapTexSubImage2DCHROMIUM* - fun:_ZN7WebCore20LayerTextureSubImage24uploadWithMapTexSubImageEPKhRKNS_7IntRectES5_S5_jPNS_17GraphicsContext3DE - fun:_ZN7WebCore20LayerTextureSubImage6uploadEPKhRKNS_7IntRectES5_S5_jPNS_17GraphicsContext3DE - fun:_ZN7WebCore31BitmapCanvasLayerTextureUpdater17updateTextureRectEPNS_17GraphicsContext3DEPNS_16TextureAllocatorEPNS_14ManagedTextureERKNS_7IntRectES9_ - fun:_ZN7WebCore31BitmapCanvasLayerTextureUpdater7Texture10updateRectEPNS_17GraphicsContext3DEPNS_16TextureAllocatorERKNS_7IntRectES8_ -} -{ - bug_122454 - Memcheck:Leak - fun:_Znw* - fun:_ZN11GrGLTexture4initEP7GrGpuGLRKNS_4DescEPKN16GrGLRenderTarget4DescE - fun:_ZN11GrGLTextureC1EP7GrGpuGLRKNS_4DescE - fun:_ZN7GrGpuGL15onCreateTextureERK13GrTextureDescPKvm - fun:_ZN5GrGpu13createTextureERK13GrTextureDescPKvm - fun:_ZN9GrContext20createAndLockTextureEmPK14GrSamplerStateRK13GrTextureDescPvm - fun:_Z27sk_gr_create_bitmap_textureP9GrContextmPK14GrSamplerStateRK8SkBitmap - fun:_ZN11SkGpuDevice17lockCachedTextureERK8SkBitmapPK14GrSamplerState -} -{ - bug_122455 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISsEE8allocateEmPKv - fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE14_M_create_nodeERKSs - fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE10_M_insert_EPKSt18_Rb_tree_node_baseS8_RKSs - fun:_ZNSt8_Rb_treeISsSsSt9_IdentityISsESt4lessISsESaISsEE16_M_insert_uniqueERKSs - fun:_ZNSt3setISsSt4lessISsESaISsEE6insertERKSs - fun:_ZN3gpu5gles219GLES2Implementation32GetRequestableExtensionsCHROMIUMEv - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl32getRequestableExtensionsCHROMIUMEv - fun:_ZN7WebCore24GraphicsContext3DPrivate20initializeExtensionsEv - fun:_ZN7WebCore24GraphicsContext3DPrivate17supportsExtensionERKN3WTF6StringE -} -{ - bug_122457 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore7ArchiveEEnwEm - fun:_ZN7WebCore12MHTMLArchive6createEv - ... - fun:_ZN7WebCore11MHTMLParser22parseArchiveWithHeaderEPNS_10MIMEHeaderE - fun:_ZN7WebCore11MHTMLParser12parseArchiveEv - fun:_ZN7WebCore12MHTMLArchive6createERKNS_4KURLEPNS_12SharedBufferE - fun:_ZN7WebCoreL20archiveFactoryCreateINS_12MHTMLArchiveEEEN3WTF10PassRefPtrINS_7ArchiveEEERKNS_4KURLEPNS_12SharedBufferE - fun:_ZN7WebCore14ArchiveFactory6createERKNS_4KURLEPNS_12SharedBufferERKN3WTF6StringE - ... - fun:_ZN7WebCore14DocumentLoader15finishedLoadingEv - fun:_ZN7WebCore18MainResourceLoader16didFinishLoadingEd -} -{ - bug_122670 - Memcheck:Leak - fun:_Znw* - fun:_ZN3WTF11ListHashSetIPN7WebCore12RenderInlineELm256ENS_7PtrHashIS3_EEEC1Ev - fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS* - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS* - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS* - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS* -} -{ - bug_122716 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISsE8allocate* - fun:_ZNSt12_Vector_baseISsSaISsEE11_M_allocate* - fun:_ZNSt6vectorISsSaISsEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPSsS1_EERKSs - fun:_ZNSt6vectorISsSaISsEE9push_backERKSs - fun:_ZN4baseL12SplitStringTISsEEvRKT_NS1_10value_typeEbPSt6vectorIS1_SaIS1_EE -} -{ - bug_122717_use_after_free - Memcheck:Unaddressable - fun:__pthread_mutex_unlock_usercnt - fun:_ZN4base8internal8LockImpl6UnlockEv - fun:_ZN4base4Lock7ReleaseEv - fun:_ZN4base8AutoLockD1Ev - fun:_ZN5gdata15GDataFileSystem21RunTaskOnIOThreadPoolERKN4base8CallbackIFvvEEE -} -{ - bug_122717_leak - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN7content13BrowserThread16PostTaskAndReplyENS0_2IDERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESB_ - fun:_ZN5gdata15GDataFileSystem37PostBlockingPoolSequencedTaskAndReplyERKSsRKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESC_ - fun:_ZN5gdata15GDataFileSystem29PostBlockingPoolSequencedTaskERKSsRKN15tracked_objects8LocationERKN4base8CallbackIFvvEEE - fun:_ZN5gdata15GDataFileSystem8SaveFeedE10scoped_ptrIN4base5ValueEE* - fun:_ZN5gdata15GDataFileSystem14OnGetDocumentsEPNS0_18GetDocumentsParamsENS_14GDataErrorCodeE10scoped_ptrIN4base5ValueEE -} -{ - bug_122752a - Memcheck:Unaddressable - fun:_ZN5blink12CCThreadImpl8postTaskEN3WTF10PassOwnPtrIN7WebCore8CCThread4TaskEEE - fun:_ZN7WebCore13CCThreadProxy18finishAllRenderingEv - fun:_ZN7WebCore15CCLayerTreeHost18finishAllRenderingEv - fun:_ZN5blink16WebLayerTreeView18finishAllRenderingEv - fun:_ZN5blink11WebViewImpl33setIsAcceleratedCompositingActiveEb - fun:_ZN5blink11WebViewImpl20setRootGraphicsLayerEPN7WebCore13GraphicsLayerE -} -{ - bug_122752b - Memcheck:Unaddressable - fun:_ZN5blink12CCThreadImpl8postTaskEN3WTF10PassOwnPtrIN7WebCore8CCThread4TaskEEE - fun:_ZN7WebCore13CCThreadProxy14setNeedsCommitEv - fun:_ZN7WebCore15CCLayerTreeHost14setNeedsCommitEv - fun:_ZN7WebCore13LayerChromium14setNeedsCommitEv - fun:_ZN7WebCore13LayerChromium11removeChildEPS0_ - fun:_ZN7WebCore13LayerChromium16removeFromParentEv - fun:_ZN7WebCore21GraphicsLayerChromium16removeFromParentEv -} -{ - bug_123307 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF16fastZeroedMallocEm - ... - fun:_ZN7WebCore12_GLOBAL__N_111V8ObjectMapIN2v86ObjectEjE3setERKNS2_6HandleIS3_EERKj - fun:_ZN7WebCore12_GLOBAL__N_110Serializer10greyObjectERKN2v86HandleINS2_6ObjectEEE - fun:_ZN7WebCore12_GLOBAL__N_110Serializer11doSerializeEN2v86HandleINS2_5ValueEEEPNS1_9StateBaseE - fun:_ZN7WebCore12_GLOBAL__N_110Serializer9serializeEN2v86HandleINS2_5ValueEEE - fun:_ZN7WebCore21SerializedScriptValueC1EN2v86HandleINS1_5ValueEEEPN3WTF6VectorINS5_6RefPtrINS_11MessagePortEEELm1EEEPNS6_INS7_INS5_11ArrayBufferEEELm1EEERb - fun:_ZN7WebCore21SerializedScriptValue6createEN2v86HandleINS1_5ValueEEEPN3WTF6VectorINS5_6RefPtrINS_11MessagePortEEELm1EEEPNS6_INS7_INS5_11ArrayBufferEEELm1EEERb - fun:_ZN7WebCoreL25handlePostMessageCallbackERKN2v89ArgumentsEb - fun:_ZN7WebCore11V8DOMWindow19postMessageCallbackERKN2v89ArgumentsE - fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE - fun:_ZN2v88internalL21Builtin_HandleApiCallENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_124156 - Memcheck:Leak - fun:_Znw* - ... - fun:*WebKitPlatformSupport*20CreateResourceLoaderERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE - fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE -} -{ - bug_124488 - Memcheck:Leak - fun:malloc - fun:strdup - ... - fun:_ZN34CopyTextureCHROMIUMResourceManager10InitializeEv - fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContextEERKNS3_4SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE - fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ -} -{ - bug_124496 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN8notifier26ProxyResolvingClientSocket23ProcessProxyResolveDoneEi -} -{ - bug_124500 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIN6webkit17WebPluginMimeTypeEE8allocateEmPKv - fun:_ZNSt12_Vector_baseIN6webkit17WebPluginMimeTypeESaIS1_EE11_M_allocateEm - fun:_ZNSt6vectorIN6webkit17WebPluginMimeTypeESaIS1_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_ - fun:_ZNSt6vectorIN6webkit17WebPluginMimeTypeESaIS1_EE9push_backERKS1_ - fun:_ZN6webkit5npapi9PluginLib20ParseMIMEDescriptionERKSsPSt6vectorINS_17WebPluginMimeTypeESaIS5_EE - fun:_ZN6webkit5npapi9PluginLib17ReadWebPluginInfoE* - fun:_ZN6webkit5npapi10PluginList14ReadPluginInfoE* - fun:_ZN6webkit5npapi10PluginList10LoadPluginE* - fun:_ZN17UtilityThreadImpl13OnLoadPluginsE* -} -{ - bug_127716 - Memcheck:Leak - fun:_Znw* - fun:_ZN3gfx5ImageC1ERK8SkBitmap - fun:_ZN16BrowserThemePack16LoadRawBitmapsToE* - fun:_ZN16BrowserThemePack18BuildFromExtensionEPK9Extension - fun:_ZN45BrowserThemePackTest_CanBuildAndReadPack_Test8TestBodyEv -} -{ - bug_130362 - Memcheck:Leak - fun:_Znw* - fun:_ZN12invalidation20NewPermanentCallbackINS_22InvalidationClientImplES1_St4pairINS_6StatusESsEEEPN4base8CallbackIFvT1_EEEPT_MT0_FvS7_E - fun:_ZN12invalidation22InvalidationClientImpl34ScheduleStartAfterReadingStateBlobEv - fun:_ZN12invalidation22InvalidationClientImpl5StartEv - fun:_ZN6syncer24SyncInvalidationListener5StartERKSsS2_S2_RKSt3mapIN8syncable9ModelTypeElSt4lessIS5_ESaISt4pairIKS5_lEEERKN12browser_sync10WeakHandleINS_24InvalidationStateTrackerEEEPNS0_8ListenerEPNS_11StateWriterE - fun:_ZN6syncer20InvalidationNotifier17UpdateCredentialsERKSsS2_ - fun:_ZN6syncer31NonBlockingInvalidationNotifier4Core17UpdateCredentialsERKSsS3_ -} -{ - bug_130449 - Memcheck:Leak - fun:_Znw* - fun:_ZN12invalidation20NewPermanentCallbackINS_22InvalidationClientImplES1_St4pairINS_6StatusESsEEEPN4base8CallbackIFvT1_EEEPT_MT0_FvS7_E - fun:_ZN12invalidation22InvalidationClientImpl34ScheduleStartAfterReadingStateBlobEv - fun:_ZN12invalidation22InvalidationClientImpl5StartEv - fun:_ZN6syncer24SyncInvalidationListener5StartERKSsS2_S2_RKSt3mapIN8syncable9ModelTypeElSt4lessIS5_ESaISt4pairIKS5_lEEERKN12browser_sync10WeakHandleINS_24InvalidationStateTrackerEEEPNS0_8ListenerE - fun:_ZN6syncer20InvalidationNotifier17UpdateCredentialsERKSsS2_ - fun:_ZN6syncer31NonBlockingInvalidationNotifier4Core17UpdateCredentialsERKSsS3_ -} -{ - bug_130619 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore9ClipRects6createERKS0_ - fun:_ZN7WebCore11RenderLayer15updateClipRectsEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeENS_29OverlayScrollbarSizeRelevancyE - ... - fun:_ZNK7WebCore11RenderLayer15parentClipRectsEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeERNS_9ClipRectsENS_29OverlayScrollbarSizeRelevancyE - fun:_ZNK7WebCore11RenderLayer18backgroundClipRectEPKS0_PNS_12RenderRegionENS_13ClipRectsTypeENS_29OverlayScrollbarSizeRelevancyE -} -{ - bug_138058 - Memcheck:Uninitialized - ... - fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE - fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE - fun:_ZN7WebCore12TextTrackCue12getCueAsHTMLEv - fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf - fun:_ZN7WebCore16HTMLMediaElement25updateActiveTextTrackCuesEf -} -{ - bug_138060 - Memcheck:Uninitialized - fun:_NPN_EvaluateHelper - fun:_NPN_Evaluate - fun:_ZN5blink11WebBindings8evaluateEP4_NPPP8NPObjectP9_NPStringP10_NPVariant - fun:_ZL13executeScriptPK12PluginObjectPKc - fun:NPP_Destroy - fun:_ZN6webkit5npapi14PluginInstance11NPP_DestroyEv - fun:_ZN6webkit5npapi21WebPluginDelegateImpl15DestroyInstanceEv - fun:_ZN6webkit5npapi21WebPluginDelegateImplD0Ev - fun:_ZN6webkit5npapi21WebPluginDelegateImpl15PluginDestroyedEv - fun:_ZN6webkit5npapi13WebPluginImpl22TearDownPluginInstanceEPN5blink12WebURLLoaderE - fun:_ZN6webkit5npapi13WebPluginImpl12SetContainerEPN5blink18WebPluginContainerE - fun:_ZN6webkit5npapi13WebPluginImpl7destroyEv - fun:_ZN5blink22WebPluginContainerImplD0Ev - fun:_ZN3WTF10RefCountedIN7WebCore6WidgetEE5derefEv - fun:_ZNSt4pairIN3WTF6RefPtrIN7WebCore6WidgetEEEPNS2_9FrameViewEED1Ev - fun:_ZN3WTF9HashTableINS_6RefPtrIN7WebCore6WidgetEEESt4pairIS4_PNS2_9FrameViewEENS_18PairFirstExtractorIS8_EENS_7PtrHashIS4_EENS_14PairHashTraitsINS_10HashTraitsIS4_EENSE_IS7_EEEESF_E15deallocateTableEPS8_i - fun:_ZN3WTF9HashTableINS_6RefPtrIN7WebCore6WidgetEEESt4pairIS4_PNS2_9FrameViewEENS_18PairFirstExtractorIS8_EENS_7PtrHashIS4_EENS_14PairHashTraitsINS_10HashTraitsIS4_EENSE_IS7_EEEESF_ED1Ev - fun:_ZN3WTF7HashMapINS_6RefPtrIN7WebCore6WidgetEEEPNS2_9FrameViewENS_7PtrHashIS4_EENS_10HashTraitsIS4_EENS9_IS6_EEED1Ev - fun:_ZN7WebCore12RenderWidget28resumeWidgetHierarchyUpdatesEv - fun:_ZN7WebCore7Element6detachEv - fun:_ZN7WebCore13ContainerNode14detachChildrenEv - fun:_ZN7WebCore13ContainerNode6detachEv -} -{ - bug_138220_a - Memcheck:Uninitialized - fun:_ZNK7WebCore16HTMLInputElement8dataListEv - fun:_ZNK7WebCore16HTMLInputElement4listEv - fun:_ZN7WebCore21RenderSliderContainer6layoutEv - fun:_ZN7WebCore11RenderBlock16layoutBlockChildEPNS_9RenderBoxERNS0_10MarginInfoERNS_20FractionalLayoutUnitES6_ - fun:_ZN7WebCore11RenderBlock19layoutBlockChildrenEbRNS_20FractionalLayoutUnitE - fun:_ZN7WebCore11RenderBlock11layoutBlockEbNS_20FractionalLayoutUnitE - fun:_ZN7WebCore11RenderBlock6layoutEv - fun:_ZN7WebCore12RenderSlider6layoutEv -} -{ - bug_138220_b - Memcheck:Uninitialized - fun:_ZNK7WebCore16HTMLInputElement8dataListEv - fun:_ZNK7WebCore16HTMLInputElement4listEv - fun:_ZN7WebCore11RenderTheme16paintSliderTicksEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE - fun:_ZN7WebCore24RenderThemeChromiumLinux16paintSliderTrackEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE - fun:_ZN7WebCore11RenderTheme5paintEPNS_12RenderObjectERKNS_9PaintInfoERKNS_7IntRectE - fun:_ZN7WebCore9RenderBox19paintBoxDecorationsERNS_9PaintInfoERKNS_21FractionalLayoutPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_21FractionalLayoutPointE -} -{ - bug_138233_a - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore17ScriptProfileNodeEEnwEm - fun:_ZN7WebCore17ScriptProfileNode6createEPKN2v814CpuProfileNodeE - fun:_ZNK7WebCore13ScriptProfile4headEv - fun:_ZN7WebCore23ScriptProfileV8InternalL14headAttrGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE - fun:_ZN2v88internal8JSObject23GetPropertyWithCallbackEPNS0_6ObjectES3_PNS0_6StringE - fun:_ZN2v88internal6Object11GetPropertyEPS1_PNS0_12LookupResultEPNS0_6StringEP18PropertyAttributes - fun:_ZN2v88internal6LoadIC4LoadENS0_16InlineCacheStateENS0_6HandleINS0_6ObjectEEENS3_INS0_6StringEEE - fun:_ZN2v88internal11LoadIC_MissENS0_9ArgumentsEPNS0_7IsolateE -} -{ - bug_138233_b - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore17ScriptProfileNodeEEnwEm - fun:_ZN7WebCore17ScriptProfileNode6createEPKN2v814CpuProfileNodeE - fun:_ZNK7WebCore17ScriptProfileNode8childrenEv - fun:_ZN7WebCore27ScriptProfileNodeV8InternalL16childrenCallbackERKN2v89ArgumentsE -} -{ - bug_138522 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN*WebCore*V8StringResourceILNS_20V8StringResourceMode* - ... - fun:_ZN7WebCore21EventTargetV8InternalL22addEventListenerMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE -} -{ - bug_138712 - Memcheck:Uninitialized - fun:_ZN7testing8internal11CmpHelperGEIddEENS_15AssertionResultEPKcS4_RKT_RKT0_ - fun:_ZN3gfx30JPEGCodec_EncodeDecodeRGB_Test8TestBodyEv -} -{ - bug_16089 WorkerPool threads and its tasks can leak by design - Memcheck:Leak - fun:_Znw* - fun:_ZN4base22PosixDynamicThreadPool7AddTaskEPNS_11PendingTaskE - fun:_ZN4base22PosixDynamicThreadPool8PostTask* -} -{ - bug_139467 - Memcheck:Uninitialized - fun:_ZNK7WebCore18AccessibilityTable9roleValueEv - fun:_ZNK7WebCore25AccessibilityRenderObject20ariaLiveRegionStatusEv - fun:_ZNK7WebCore19AccessibilityObject22supportsARIALiveRegionEv - fun:_ZNK7WebCore19AccessibilityObject22supportsARIAAttributesEv - fun:_ZN7WebCore25AccessibilityRenderObject26determineAccessibilityRoleEv - fun:_ZN7WebCore23AccessibilityNodeObject4initEv - fun:_ZN7WebCore25AccessibilityRenderObject4initEv - fun:_ZN7WebCore18AccessibilityTable4initEv -} -{ - bug_139470 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore22ThreadableBlobRegistry17unregisterBlobURLERKNS_4KURLE - ... - fun:_ZN7WebCore15WrapperTypeInfo11derefObjectEPv - fun:_ZN7WebCore7DOMData11derefObjectEPNS_15WrapperTypeInfoEPv - fun:_ZN7WebCore7DOMData23WrapperMapObjectRemoverIvE15visitDOMWrapperEPNS_12DOMDataStoreEPvN2v810PersistentINS6_6ObjectEEE - fun:_ZN7WebCore16WeakReferenceMapIvN2v86ObjectEE5visitEPNS_12DOMDataStoreEPNS_24AbstractWeakReferenceMapIvS2_E7VisitorE - fun:_ZN7WebCore7DOMData27removeObjectsFromWrapperMapIvEEvPNS_12DOMDataStoreERNS_24AbstractWeakReferenceMapIT_N2v86ObjectEEE - fun:_ZN7WebCore19removeAllDOMObjectsEv - fun:_ZN7WebCore22WorkerScriptControllerD1Ev - fun:_ZN3WTF14deleteOwnedPtrIN7WebCore22WorkerScriptControllerEEEvPT_ - fun:_ZN3WTF6OwnPtrIN7WebCore22WorkerScriptControllerEE5clearEv - fun:_ZN7WebCore13WorkerContext11clearScriptEv - fun:_ZN7WebCore30WorkerThreadShutdownFinishTask11performTaskEPNS_22ScriptExecutionContextE - fun:_ZN7WebCore13WorkerRunLoop4Task11performTaskERKS0_PNS_22ScriptExecutionContextE - fun:_ZN7WebCore13WorkerRunLoop9runInModeEPNS_13WorkerContextERKNS_13ModePredicateENS0_8WaitModeE - fun:_ZN7WebCore13WorkerRunLoop3runEPNS_13WorkerContextE - fun:_ZN7WebCore12WorkerThread12runEventLoopEv - fun:_ZN7WebCore21DedicatedWorkerThread12runEventLoopEv -} -{ - bug_139853 - Memcheck:Unaddressable - fun:_ZN11SkGpuDeviceC1EP9GrContextP9GrTexture - fun:_ZN7WebCoreL23createAcceleratedCanvas* - fun:_ZN7WebCore45FrameBufferSkPictureCanvasLayerTextureUpdater17* - fun:_ZN7WebCore45FrameBufferSkPictureCanvasLayerTextureUpdater7Texture10updateRectEPNS_18CCResourceProviderERKNS_7IntRectES6_ - fun:_ZN7WebCore12_GLOBAL__N_126UnthrottledTextureUploader13uploadTextureEPNS_19LayerTextureUpdater7TextureEPNS_18CCResourceProviderENS_7IntRectES7_ - fun:_ZN7WebCore16CCTextureUpdater6updateEPNS_18CCResourceProviderEPNS_13TextureCopierEPNS_15TextureUploaderEm - fun:_ZN7WebCore19CCSingleThreadProxy8doCommitERNS_16CCTextureUpdaterE - fun:_ZN7WebCore19CCSingleThreadProxy18commitAndCompositeEv - fun:_ZN7WebCore19CCSingleThreadProxy20compositeAndReadbackEPvRKNS_7IntRectE - fun:_ZN7WebCore15CCLayerTreeHost20compositeAndReadbackEPvRKNS_7IntRectE - fun:_ZN5blink16WebLayerTreeView20compositeAndReadbackEPvRKNS_7WebRectE - fun:_ZN5blink11WebViewImpl23doPixelReadbackToCanvasEP8SkCanvasRKN7WebCore7IntRectE - fun:_ZN5blink11WebViewImpl5paintEP8SkCanvasRKNS_7WebRectE - fun:_ZN11WebViewHost9paintRectERKN5blink7WebRectE - fun:_ZN11WebViewHost22paintInvalidatedRegionEv -} -{ - bug_139996 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN7WebCore15toWebCoreStringEN2v86HandleINS0_5ValueEEE - fun:_ZN7WebCore6V8Blob19constructorCallbackERKN2v89ArgumentsE - fun:_ZN2v88internalL19HandleApiCallHelperILb1EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE - fun:_ZN2v88internalL30Builtin_HandleApiCallConstructENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_139998 - Memcheck:Leak - fun:*alloc - ... - fun:_ZL23link_intrastage_shadersP14__GLcontextRecP17gl_shader_programPP9gl_shaderj - fun:_Z12link_shadersP14__GLcontextRecP17gl_shader_program - fun:_mesa_glsl_link_shader - fun:link_program - fun:_mesa_LinkProgramARB - fun:glLinkProgram - ... - fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgramEj - fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgram* - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv - fun:_ZN3gpu12GpuScheduler10PutChangedEv - fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv -} -{ - bug_140196 - Memcheck:Uninitialized - fun:_ZNK12SkDescriptor6equalsERKS_ - fun:_ZN12SkGlyphCache10VisitCacheEPK12SkDescriptorPFbPKS_PvES5_ - ... - fun:_ZNK7SkPaint14descriptorProcEPK8SkMatrixPFvPK12SkDescriptorPvES6_b -} -{ - bug_143545 - Memcheck:Uninitialized - fun:_ZN4aura10RootWindow10ShowCursorEb - fun:_ZN3ash5Shell10ShowCursorEb - fun:_ZN3ash13CursorManager10ShowCursorEb - fun:_ZN3ash4test11AshTestBase5SetUpEv -} -{ - bug_144118 - Memcheck:Unaddressable - fun:NPP_SetWindow - fun:_ZN6webkit5npapi14PluginInstance13NPP_SetWindowEP9_NPWindow - fun:_ZN6webkit5npapi21WebPluginDelegateImpl17WindowedSetWindowEv - fun:_ZN6webkit5npapi21WebPluginDelegateImpl22WindowedUpdateGeometryERKN3gfx4RectES5_ - fun:_ZN6webkit5npapi21WebPluginDelegateImpl14UpdateGeometryERKN3gfx4RectES5_ - fun:_ZN6webkit5npapi13WebPluginImpl14updateGeometryERKN5blink7WebRectES5_RKNS2_9WebVectorIS3_EEb - fun:_ZN5blink22WebPluginContainerImpl14reportGeometryEv - fun:_ZN5blink22WebPluginContainerImpl12setFrameRectERKN7WebCore7IntRectE - ... - fun:_ZN9TestShell4dumpEv -} -{ - bug_144118_b - Memcheck:Unaddressable - fun:_ZNK3WTF6OwnPtrIN5blink14ScrollbarGroupEEcvMS3_PS2_Ev - fun:_ZN5blink22WebPluginContainerImpl14reportGeometryEv - fun:_ZN5blink22WebPluginContainerImpl12setFrameRectERKN7WebCore7IntRectE - ... - fun:_ZN9TestShell4dumpEv -} -{ - bug_144913 - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos30BluetoothAdapterClientStubImplC1Ev - fun:_ZN8chromeos22BluetoothAdapterClient6CreateENS_28DBusClientImplementationTypeEPN4dbus3BusEPNS_22BluetoothManagerClientE - fun:_ZN8chromeos21DBusThreadManagerImplC1ENS_28DBusClientImplementationTypeE - fun:_ZN8chromeos17DBusThreadManager10InitializeEv - fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv -} -{ - bug_144913_b - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos17DBusThreadManager10InitializeEv - fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv -} -{ - bug_144913_c - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN8chromeos21DBusThreadManagerImplC1ENS_28DBusClientImplementationTypeE - fun:_ZN8chromeos17DBusThreadManager10InitializeEv - fun:_ZN8chromeos23KioskModeIdleLogoutTest5SetUpEv -} -{ - bug_144930 - Memcheck:Leak - fun:_Znw* - fun:_ZL20cachedPaintLuminancef -} -{ - bug_144930_b - Memcheck:Leak - fun:_Znw* - fun:_ZL21cachedDeviceLuminancef -} -{ - bug_145244 - Memcheck:Uninitialized - fun:_ZN7WebCore15StyleRuleImport17requestStyleSheetEPNS_13CSSStyleSheetERKNS_16CSSParserContextE - fun:_ZN7WebCore18StyleSheetContents26requestImportedStyleSheetsEPNS_13CSSStyleSheetE -} -{ - bug_145645 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore18InjectedScriptHostEEnwEm - fun:_ZN7WebCore18InjectedScriptHost6createEv - fun:_ZN7WebCore21InjectedScriptManagerC1EPFbPNS_11ScriptStateEE - fun:_ZN7WebCore21InjectedScriptManager15createForWorkerEv - fun:_ZN7WebCore25WorkerInspectorControllerC1EPNS_13WorkerContextE -} -{ - bug_145650a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN14WebDataService10AddKeywordERK15TemplateURLData - fun:_ZN18TemplateURLService11AddNoNotifyEP11TemplateURLb -} -{ - bug_145650b - Memcheck:Leak - fun:_Znw* - fun:_ZN14WebDataService13RemoveKeywordEl - fun:_ZN18TemplateURLService14RemoveNoNotifyEP11TemplateURL - fun:_ZN18TemplateURLService6RemoveEP11TemplateURL - fun:_ZN9protector71DefaultSearchProviderChangeTest_CurrentSearchProviderRemovedByUser_Test19RunTestOnMainThreadEv -} -{ - bug_145650c - Memcheck:Leak - fun:_Znw* - fun:_ZN14WebDataService13UpdateKeywordERK15TemplateURLData - fun:_ZN18TemplateURLService32SetDefaultSearchProviderNoNotifyEP11TemplateURL -} -{ - bug_125692a - Memcheck:Uninitialized - fun:_ZN2v88internal11StoreBuffer28IteratePointersInStoreBufferEPFvPPNS0_10HeapObjectES3_E - fun:_ZN2v88internal11StoreBuffer25IteratePointersToNewSpaceEPFvPPNS0_10HeapObjectES3_E - fun:_ZN2v88internal20MarkCompactCollector29EvacuateNewSpaceAndCandidatesEv - fun:_ZN2v88internal20MarkCompactCollector11SweepSpacesEv - fun:_ZN2v88internal20MarkCompactCollector14CollectGarbageEv - fun:_ZN2v88internal4Heap11MarkCompactEPNS0_8GCTracerE -} -{ - bug_125692b - Memcheck:Uninitialized - fun:_ZN2v88internal11StoreBuffer7CompactEv - fun:_ZN2v88internal11StoreBuffer19PrepareForIterationEv - fun:_ZN2v88internal11StoreBuffer25IteratePointersToNewSpaceEPFvPPNS0_10HeapObjectES3_E - fun:_ZN2v88internal20MarkCompactCollector29EvacuateNewSpaceAndCandidatesEv - fun:_ZN2v88internal20MarkCompactCollector11SweepSpacesEv - fun:_ZN2v88internal20MarkCompactCollector14CollectGarbageEv - fun:_ZN2v88internal4Heap11MarkCompactEPNS0_8GCTracerE - fun:_ZN2v88internal4Heap24PerformGarbageCollectionENS0_16GarbageCollectorEPNS0_8GCTracerE - fun:_ZN2v88internal4Heap14CollectGarbageENS0_15AllocationSpaceENS0_16GarbageCollectorEPKcS5_ - fun:_ZN2v88internal4Heap14CollectGarbageENS0_15AllocationSpaceEPKc - fun:_ZN2v88internal4Heap17CollectAllGarbageEiPKc - fun:_ZN2v88internal4Heap16IdleNotificationEi - fun:_ZN2v88internal2V816IdleNotificationEi - fun:_ZN2v82V816IdleNotificationEi - fun:_ZN16RenderThreadImpl11IdleHandlerEv -} -{ - bug_145693 - Memcheck:Leak - fun:_Znw* - fun:_ZN10extensions18PermissionsUpdater17RecordOAuth2GrantEPKNS_9ExtensionE - fun:_ZN10extensions18PermissionsUpdater22GrantActivePermissionsEPKNS_9ExtensionEb - fun:_ZN10extensions12CrxInstaller25ReportSuccessFromUIThreadEv -} -{ - bug_145695 - Memcheck:Leak - fun:malloc - fun:NaClDescImcBoundDescAcceptConn - fun:RevRpcHandlerBase - fun:NaClThreadInterfaceStart -} -{ - bug_145696 - Memcheck:Leak - fun:_Znw* - fun:_ZN10extensions9TabHelper23OnInlineWebstoreInstallEiiRKSsRK4GURL -} -{ - bug_145697 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN18SecurityFilterPeer40CreateSecurityFilterPeerForDeniedRequestEN12ResourceType4TypeEPN11webkit_glue20ResourceLoaderBridge4PeerEi - fun:_ZN12_GLOBAL__N_124RendererResourceDelegate17OnRequestCompleteEPN11webkit_glue20ResourceLoaderBridge4PeerEN12ResourceType4TypeERKN3net16URLRequestStatusE - fun:_ZN7content18ResourceDispatcher17OnRequestCompleteEiRKN3net16URLRequestStatusERKSsRKN4base9TimeTicksE -} -{ - bug_145699 - Memcheck:Leak - fun:_Znw* - fun:_ZN17OAuth2ApiCallFlow24CreateAccessTokenFetcherEv - fun:_ZN17OAuth2ApiCallFlow20BeginMintAccessTokenEv - fun:_ZN17OAuth2ApiCallFlow12BeginApiCallEv - fun:_ZN17OAuth2ApiCallFlow5StartEv - fun:_ZN19OAuth2MintTokenFlow13FireAndForgetEv -} -{ - bug_145703 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN7content16SiteInstanceImpl10GetProcessEv - fun:_ZN7content18RenderViewHostImplC1EPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEibPNS_23SessionStorageNamespaceE - fun:_ZN7content21RenderViewHostFactory6CreateEPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEibPNS_23SessionStorageNamespaceE - fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEi - fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE - fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE - fun:_ZN7content17WebContentsTester21CreateTestWebContentsEPNS_14BrowserContextEPNS_12SiteInstanceE -} -{ - bug_145704 - Memcheck:Leak - fun:_Znw* - fun:_ZN2v88internal5Debug17CreateScriptCacheEv - fun:_ZN2v88internal5Debug16GetLoadedScriptsEv - fun:_ZN2v88internal29Runtime_DebugGetLoadedScriptsENS0_9ArgumentsEPNS0_7IsolateE -} -{ - bug_145705 - Memcheck:Leak - fun:_Znw* - fun:_ZN10extensions16SettingsFrontendC1ERK13scoped_refptrINS_22SettingsStorageFactoryEEP7Profile - fun:_ZN10extensions16SettingsFrontend6CreateEP7Profile - fun:_ZN16ExtensionServiceC1E* -} -{ - bug_145708 - Memcheck:Leak - fun:_Znw* - fun:_ZN27ExtensionDevToolsClientHostC1EPN7content11WebContentsERKSsS4_i - fun:_ZN22AttachDebuggerFunction7RunImplEv - fun:_ZN17ExtensionFunction3RunEv - fun:_ZN27ExtensionFunctionDispatcher8DispatchERK31ExtensionHostMsg_Request_ParamsPN7content14RenderViewHostE - fun:_ZN10extensions13ExtensionHost9OnRequestERK31ExtensionHostMsg_Request_Params -} -{ - bug_145712 - Memcheck:Leak - fun:_Znw* - fun:_ZN5blink25NotificationPresenterImpl17requestPermissionEPN7WebCore22Scri ptExecutionContextEN3WTF10PassRefPtrINS1_12VoidCallbackEEE - fun:_ZN7WebCore18NotificationCenter17requestPermissionEN3WTF10PassRefPtrINS_1 2VoidCallbackEEE - fun:_ZN7WebCore20V8NotificationCenter25requestPermissionCallbackERKN2v89Argum entsE -} -{ - bug_145723 - Memcheck:Leak - fun:_Znw* - fun:_Z20NewExtensionFunctionI25TabsExecuteScriptFunctionEP17ExtensionFunctionv - fun:_ZN25ExtensionFunctionRegistry11NewFunctionERKSs - fun:_ZN27ExtensionFunctionDispatcher23CreateExtensionFunctionERK31ExtensionHostMsg_Request_ParamsPKN10extensions9ExtensionEiRKNS3_10ProcessMapEPNS3_12ExtensionAPIEPvPN3IPC6SenderEPN7content14RenderViewHostEi - fun:_ZN27ExtensionFunctionDispatcher8DispatchERK31ExtensionHostMsg_Request_ParamsPN7content14RenderViewHostE - fun:_ZN10extensions13ExtensionHost9OnRequestERK31ExtensionHostMsg_Request_Params -} -{ - bug_145735 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIcE8allocateEmPKv - fun:_ZNSt12_Vector_baseIcSaIcEE11_M_allocateEm - fun:_ZNSt12_Vector_baseIcSaIcEEC2EmRKS0_ - fun:_ZNSt6vectorIcSaIcEEC1EmRKcRKS0_ - fun:_ZN4base5files12_GLOBAL__N_121InotifyReaderCallbackEPNS1_13InotifyReaderEii -} -{ - bug_146464 - Memcheck:Leak - fun:realloc - fun:add_codeset.isra.10 - ... - fun:XCreatePixmap - fun:XCreateBitmapFromData - ... - fun:_ZN4aura19RootWindowHostLinuxC1EPNS_22RootWindowHostDelegateERKN3gfx4RectE -} -{ - bug_146950 - Memcheck:Leak - fun:malloc - fun:get_peer_sock_name - fun:_xcb_get_auth_info - fun:xcb_connect_to_display_with_auth_info - fun:_XConnectXCB - fun:XOpenDisplay - fun:_ZN4base18MessagePumpAuraX1118GetDefaultXDisplayEv -} -{ - bug_147755_a - Memcheck:Leak - fun:_Znw* - fun:_ZN12PluginFinder18GetPluginInstallerERKN6webkit13WebPluginInfoE - fun:_ZN11PluginPrefs30EnablePluginIfPossibleCallbackE* -} -{ - bug_147755_b - Memcheck:Leak - fun:_Znw* - fun:_ZN12PluginFinder17GetPluginMetadataERKN6webkit13WebPluginInfoE - fun:_ZN11PluginPrefs12EnablePluginE* - fun:_ZN15PluginPrefsTest25EnablePluginSynchronouslyE* - fun:_ZN44PluginPrefsTest_UnifiedPepperFlashState_Test8TestBodyEv -} -{ - bug_149734a - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF16VectorBufferBaseIN7WebCore9AttributeEE14allocateBufferEm - fun:_ZN3WTF12VectorBufferIN7WebCore9AttributeELm4EE14allocateBufferEm - fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE22reserveInitialCapacityEm - fun:_ZN7WebCore20ElementAttributeData13cloneDataFromERKS0_RKNS_7ElementERS3_ -} -{ - bug_149734b - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF16VectorBufferBaseIN7WebCore9AttributeEE14allocateBufferEm - fun:_ZN3WTF12VectorBufferIN7WebCore9AttributeELm4EE14allocateBufferEm - fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE15reserveCapacityEm - fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14expandCapacityEm - fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14expandCapacityEmPKS2_ - fun:_ZN3WTF6VectorIN7WebCore9AttributeELm4EE14appendSlowCaseIS2_EEvRKT_ - fun:_ZN7WebCore20ElementAttributeData12addAttributeERKNS_9AttributeEPNS_7ElementENS_30SynchronizationOfLazyAttributeE -} -{ - bug_150995 - Memcheck:Leak - fun:_Zna* - fun:_ZN14webkit_support12_GLOBAL__N_113DoLibpngWrite* - fun:_ZN14webkit_support26EncodeWithCompressionLevel* - fun:_ZN14webkit_support6EncodeEPKhNS_12_GLOBAL__N_111ColorFormat* - fun:_ZN14webkit_support25EncodeBGRAPNGWithChecksum* - fun:_ZNK9TestShell9dumpImageEP8SkCanvas - fun:_ZN9TestShell4dumpEv - fun:_ZN9TestShell12testFinishedEP11WebViewHost - fun:_ZN11WebViewHost12testFinishedEv - fun:_ZN13WebTestRunner10TestRunner9WorkQueue15processWorkSoonEv -} -{ - bug_151006 - Memcheck:Leak - fun:malloc - fun:uprv_malloc_46 - fun:_ZN6icu_467UMemorynwEm - fun:_ZN6icu_4610DateFormat6createENS0_6EStyleES1_RKNS_6LocaleE - fun:_ZN6icu_4610DateFormat22createDateTimeInstanceENS0_6EStyleES1_RKNS_6LocaleE - fun:udat_open_46 - fun:_ZNK7WebCore9LocaleICU14openDateFormatE16UDateFormatStyleS1_ - fun:_ZN7WebCore9LocaleICU24initializeDateTimeFormatEv - fun:_ZN7WebCore9LocaleICU15shortTimeFormatEv - fun:_ZN7WebCore19DateTimeEditElement6layoutERKNS_9StepRangeERKNS_14DateComponentsERNS_9LocalizerE - fun:_ZN7WebCore19DateTimeEditElement13setEmptyValueERKNS_9StepRangeERKNS_14DateComponentsERNS_9LocalizerE - fun:_ZN7WebCore13TimeInputType20updateInnerTextValueEv - fun:_ZN7WebCore13TimeInputType19createShadowSubtreeEv - fun:_ZN7WebCore16HTMLInputElement10updateTypeEv - fun:_ZN7WebCore16HTMLInputElement14parseAttributeERKNS_9AttributeE - fun:_ZN7WebCore7Element16attributeChangedERKNS_9AttributeE - fun:_ZN7WebCore13StyledElement16attributeChangedERKNS_9AttributeE - fun:_ZN7WebCore7Element19parserSetAttributesERKN3WTF6VectorINS_9AttributeELm0EEENS_27FragmentScriptingPermissionE - fun:_ZN7WebCore20HTMLConstructionSite17createHTMLElementEPNS_15AtomicHTMLTokenE - fun:_ZN7WebCore20HTMLConstructionSite28insertSelfClosingHTMLElementEPNS_15AtomicHTMLTokenE - fun:_ZN7WebCore15HTMLTreeBuilder24processStartTagForInBodyEPNS_15AtomicHTMLTokenE - fun:_ZN7WebCore15HTMLTreeBuilder15processStartTagEPNS_15AtomicHTMLTokenE -} -{ - bug_151007 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore15AtomicHTMLTokenEEnwEm - fun:_ZN7WebCore15AtomicHTMLToken6createERNS_9HTMLTokenE - fun:_ZN7WebCore15HTMLTreeBuilder22constructTreeFromTokenERNS_9HTMLTokenE - fun:_ZN7WebCore18HTMLDocumentParser13pumpTokenizerENS0_15SynchronousModeE - fun:_ZN7WebCore18HTMLDocumentParser23pumpTokenizerIfPossibleENS0_15SynchronousModeE - fun:_ZN7WebCore18HTMLDocumentParser6insertERKNS_15SegmentedStringE - fun:_ZN7WebCore18HTMLDocumentParser21parseDocumentFragmentERKN3WTF6StringEPNS_16DocumentFragmentEPNS_7ElementENS_27FragmentScriptingPermissionE - fun:_ZN7WebCore16DocumentFragment9parseHTMLERKN3WTF6StringEPNS_7ElementENS_27FragmentScriptingPermissionE - fun:_ZN7WebCore31createFragmentForInnerOuterHTMLERKN3WTF6StringEPNS_7ElementENS_27FragmentScriptingPermissionERi - fun:_ZN7WebCore11HTMLElement12setInnerHTMLERKN3WTF6StringERi - fun:_ZN7WebCore21HTMLElementV8InternalL19innerHTMLAttrSetterEN2v85LocalINS1_6StringEEENS2_INS1_5ValueEEERKNS1_12AccessorInfoE - fun:_ZN2v88internal21StoreCallbackPropertyENS0_9ArgumentsEPNS0_7IsolateE - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb -} -{ - bug_151908 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ - fun:_ZN14webkit_support23CreateGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesEPNS0_7WebViewE - fun:_ZN11WebViewHost19createOutputSurfaceEv - fun:_ZN5blink11WebViewImpl19createOutputSurfaceEv - fun:_ZN5blink20WebLayerTreeViewImpl19createOutputSurfaceEv -} -{ - bug_155404 - Memcheck:Uninitialized - fun:_ZN2v88internalL21ProfilerSignalHandlerEiP7siginfoPv - obj:/lib/libpthread-2.11.1.so -} -{ - bug_156829 - Memcheck:Leak - fun:_Znw* - fun:_ZN7content23AudioInputDeviceManager23EnumerateOnDeviceThread* -} -{ - bug_158510 - Memcheck:Uninitialized - fun:_ZN7WebCore11RenderTable6layoutEv - ... - fun:_ZN7WebCore11RenderBlock6layoutEv -} -{ - bug_158514 - Memcheck:Uninitialized - ... - fun:_ZN2v88internal16ProfileGenerator16RecordTickSampleERKNS0_10TickSampleE - fun:_ZN2v88internal23ProfilerEventsProcessor12ProcessTicksEj - fun:_ZN2v88internal23ProfilerEventsProcessor3RunEv - fun:_ZN2v88internalL11ThreadEntryEPv -} -{ - bug_159005 - Memcheck:Uninitialized - fun:_ZN7WebCore13RenderMarquee18updateMarqueeStyleEv - fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore22RenderLayerModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore11RenderBlock14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore12RenderObject8setStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE -} -{ - bug_160877 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN7content*DummyListenSocketC1Ev - fun:_ZNK7content*DummyListenSocketFactory15CreateAndListenEPN3net18StreamListenSocket8DelegateE - ... - fun:_ZN3net10HttpServerC1ERKNS_25StreamListenSocketFactoryEPNS0_8DelegateE - fun:_ZN7content23DevToolsHttpHandlerImpl4InitEv -} -{ - bug_162825 - Memcheck:Uninitialized - fun:bcmp - fun:_ZNK3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsltERKS2_ - fun:_ZNKSt4lessIN3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsEEclERKS3_S6_ - ... - fun:_ZNSt3mapIN3gpu5gles221ShaderTranslatorCache26ShaderTranslatorInitParamsEPNS1_16ShaderTranslatorESt4lessIS3_ESaISt4pairIKS3_S5_EEE4findERS9_ - ... - fun:_ZN3gpu5gles216GLES2DecoderImpl26InitializeShaderTranslatorEv -} -{ - bug_162828 - Memcheck:Leak - fun:malloc - fun:_Z15sk_malloc_flagsmj - fun:_Z15sk_malloc_throwm - fun:_ZN6SkMask10AllocImageEm - fun:_ZL17drawRectsIntoMaskPK6SkRectiP6SkMask - fun:_ZN20SkBlurMaskFilterImpl17filterRectsToNineEPK6SkRectiRK8SkMatrixRK7SkIRectPN12SkMaskFilter9NinePatchE - fun:_ZN12SkMaskFilter10filterPathERK6SkPathRK8SkMatrixRK12SkRasterClipP9SkBounderP9SkBlitterN7SkPaint5StyleE - fun:_ZNK6SkDraw8drawPathERK6SkPathRK7SkPaintPK8SkMatrixb -} -{ - bug_163922 - Memcheck:Leak - fun:_Znw* - fun:_ZN10extensions16SettingsFrontendC1ERK13scoped_refptrINS_22SettingsStorageFactoryEEP7Profile - fun:_ZN10extensions16SettingsFrontend6CreateEP7Profile - fun:_ZN16ExtensionServiceC1E* - fun:_ZN10extensions19ExtensionSystemImpl6Shared4InitEb - fun:_ZN10extensions19ExtensionSystemImpl21InitForRegularProfileEb - fun:_ZN14ProfileManager22DoFinalInitForServicesEP7Profileb - fun:_ZN14ProfileManager11DoFinalInitEP7Profileb - fun:_ZN14ProfileManager10AddProfileEP7Profile - fun:_ZN14ProfileManager10GetProfileE* -} -{ - bug_163924 - Memcheck:Leak - fun:_Znw* - fun:_ZN28JSONAsynchronousUnpackerImpl22StartProcessOnIOThreadEN7content13BrowserThread2IDERKSs -} -{ - bug_164176 - Memcheck:Leak - fun:_Znw* - fun:_ZN18BrowserProcessImpl21PreMainMessageLoopRunEv - fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv - fun:_ZN22ChromeBrowserMainParts21PreMainMessageLoopRunEv - fun:_ZN7content15BrowserMainLoop13CreateThreadsEv - fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE - fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE - fun:ChromeMain -} -{ - bug_164178 - Memcheck:Leak - fun:_Znw* - fun:_ZN3net25MultiThreadedCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_6CRLSetEPNS_16CertVerifyResultERKN4base8CallbackIFviEEEPPvRKNS_11BoundNetLogE - fun:_ZN3net25SingleRequestCertVerifier6VerifyEPNS_15X509CertificateERKSsiPNS_6CRLSetEPNS_16CertVerifyResultERKN4base8CallbackIFviEEERKNS_11BoundNetLogE - fun:_ZN3net18SSLClientSocketNSS12DoVerifyCertEi - fun:_ZN3net18SSLClientSocketNSS15DoHandshakeLoopEi - fun:_ZN3net18SSLClientSocketNSS21OnHandshakeIOCompleteEi -} -{ - bug_164179 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net10URLFetcher6CreateERK4GURLNS0_11RequestTypeEPNS_18URLFetcherDelegateE - fun:_ZN18WebResourceService10StartFetchEv -} -{ - bug_164198 - Memcheck:Uninitialized - fun:_ZN7WebCore9RenderBox15paintFillLayersERKNS_9PaintInfoERKNS_5ColorEPKNS_9FillLayerERKNS_10LayoutRectENS_24BackgroundBleedAvoidanceENS_17CompositeOperatorEPNS_12RenderObjectE - ... - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_11LayoutPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_11LayoutPointE - fun:_ZN7WebCore11RenderLayer18paintLayerContentsEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer31paintLayerContentsAndReflectionEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer10paintLayerEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer9paintListEPN3WTF6VectorIPS0_Lm0EEEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer18paintLayerContentsEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer31paintLayerContentsAndReflectionEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj - fun:_ZN7WebCore11RenderLayer10paintLayerEPNS_15GraphicsContextERKNS0_17LayerPaintingInfoEj -} -{ - bug_166470 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMN11dom_storage17DomStorageContextEFvRK4GURLE13scoped_refptrIS2_ES3_EENS_8CallbackINS_8internal9BindStateINSB_13FunctorTraitsIT_E12RunnableTypeENSF_7RunTypeEFvNSB_19CallbackParamTraitsIT0_E11StorageTypeENSI_IT1_E11StorageTypeEEE14UnboundRunTypeEEESE_RKSJ_RKSM_ - fun:_ZN7content21DOMStorageContextImpl18DeleteLocalStorageERK4GURL - ... - fun:_ZN10extensions11DataDeleter13StartDeletingEP7ProfileRKSsRK4GURL - fun:_ZN16ExtensionService18UninstallExtensionESsbPSbItN4base20string16_char_traitsESaItEE -} -{ - bug_166470c - Memcheck:Leak - fun:_Znw* - fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL - fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL -} -{ - bug_166470d - Memcheck:Leak - ... - fun:_ZN7fileapi26GetOriginIdentifierFromURLERK4GURL - fun:_ZN11dom_storage14DomStorageArea26DatabaseFileNameFromOriginERK4GURL - fun:_ZN11dom_storage14DomStorageAreaC1E* - fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL - fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL -} -{ - bug_166709 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMNS_12_GLOBAL__N_121PostTaskAndReplyRelayEFvvENS_8internal17UnretainedWrapper* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8Location* - ... - fun:_ZN16ExtensionService12AddExtensionEPKN10extensions9ExtensionE - fun:_ZN52BackgroundApplicationListModelTest_ExplicitTest_Test8TestBodyEv -} -{ - bug_166709b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base12_GLOBAL__N_112CreateThreadEmbPNS_14PlatformThread8DelegateEPmNS_14ThreadPriorityE - fun:_ZN4base14PlatformThread6CreateEmPNS0_8DelegateEPm - fun:_ZN4base12SimpleThread5StartEv - fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs - fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi - fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE - fun:_ZN4base19SequencedWorkerPool6Worker3RunEv - fun:_ZN4base12SimpleThread10ThreadMainEv - fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv -} -{ - bug_166709c - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN7content13BrowserThread28PostBlockingPoolTaskAndReplyERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESA_ - fun:_ZN10extensions11ImageLoader15LoadImagesAsyncEPKNS_9ExtensionERKSt6vectorINS0_19ImageRepresentationESaIS5_EERKN4base8CallbackIFvRKN3gfx5ImageEEEE -} -{ - bug_166818 - Memcheck:Leak - fun:malloc - fun:g_malloc - ... - fun:gdk_pixbuf_loader_load_module - fun:gdk_pixbuf_loader_close - fun:_ZN2ui12_GLOBAL__N_110LoadPixbufEPN4base22RefCountedStaticMemoryEb - fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEiNS0_8ImageRTLE - fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEi -} -{ - bug_166819 - Memcheck:Leak - fun:_Znw* - fun:_ZNK3sql10Connection21GetUntrackedStatementEPKc - fun:_ZNK3sql10Connection21DoesTableOrIndexExistEPKcS2_ - fun:_ZNK3sql10Connection14DoesTableExistEPKc - fun:_ZN3sql9MetaTable14DoesTableExistEPNS_10ConnectionE - ... - fun:_ZN7history16TopSitesDatabase4InitE* - fun:_ZN7history15TopSitesBackend16InitDBOnDBThreadE* -} -{ - bug_166819b - Memcheck:Leak - fun:_Znw* - fun:_ZNK3sql10Connection21GetUntrackedStatementEPKc - fun:_ZNK3sql10Connection21DoesTableOrIndexExistEPKcS2_ - fun:_ZNK3sql10Connection14DoesTableExistEPKc - fun:_ZN7history17ShortcutsDatabase11EnsureTableEv - fun:_ZN7history17ShortcutsDatabase4InitEv - fun:_ZN7history16ShortcutsBackend12InitInternalEv -} -{ - bug_166976a - Memcheck:Leak - fun:_Znw* - fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi - fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE - fun:_ZN4base19SequencedWorkerPool6Worker3RunEv - fun:_ZN4base12SimpleThread10ThreadMainEv - fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv -} -{ - bug_166976b - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN4base13WaitableEvent6WaiterEEE8allocateEmPKv - fun:_ZNSt10_List_baseIPN4base13WaitableEvent6WaiterESaIS3_EE11_M_get_nodeEv - fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE14_M_create_nodeERKS3_ - fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE9_M_insertESt14_List_iteratorIS3_ERKS3_ - fun:_ZNSt4listIPN4base13WaitableEvent6WaiterESaIS3_EE9push_backERKS3_ - fun:_ZN4base13WaitableEvent7EnqueueEPNS0_6WaiterE - fun:_ZN4base13WaitableEvent9TimedWaitERKNS_9TimeDeltaE - fun:_ZN4base13WaitableEvent4WaitEv - ... - fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs - fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi - fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE - fun:_ZN4base19SequencedWorkerPool6Worker3RunEv -} -{ - bug_167175a - Memcheck:Leak - ... - fun:g_* - ... - fun:_ZN16BrowserWindowGtk11InitWidgetsEv - fun:_ZN16BrowserWindowGtk4InitEv - fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser -} -{ - bug_167175b - Memcheck:Leak - fun:malloc - obj:/lib/libpng12.so.0.42.0 - fun:png_create_read_struct_2 - ... - fun:_ZN15ReloadButtonGtkC1EP18LocationBarViewGtkP7Browser - fun:_ZN17BrowserToolbarGtk4InitEP10_GtkWindow - fun:_ZN16BrowserWindowGtk11InitWidgetsEv - fun:_ZN16BrowserWindowGtk4InitEv - fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser -} -{ - bug_167175d - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISbItN4base20string16_char_traitsESaItEEE8allocateEmPKv - fun:_ZNSt12_Vector_baseISbItN4base20string16_char_traitsESaItEESaIS3_EE11_M_allocateEm - ... - fun:_ZN15WrenchMenuModel5BuildEbb - fun:_ZN15WrenchMenuModelC1EPN2ui19AcceleratorProviderEP7Browserbb - fun:_ZN17BrowserToolbarGtkC1EP7BrowserP16BrowserWindowGtk - fun:_ZN16BrowserWindowGtk11InitWidgetsEv - fun:_ZN16BrowserWindowGtk4InitEv - fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser -} -{ - bug_170340 - Memcheck:Uninitialized - fun:_ZN3WTF12AtomicString3addEPKt - fun:_ZN3WTF12AtomicStringC1EPKt - fun:_ZN7WebCore18HTMLPreloadScanner12processTokenEv - fun:_ZN7WebCore18HTMLPreloadScanner4scanEv - fun:_ZN7WebCore18HTMLDocumentParser13pumpTokenizerENS0_15SynchronousModeE - fun:_ZN7WebCore18HTMLDocumentParser23pumpTokenizerIfPossibleENS0_15SynchronousModeE - fun:_ZN7WebCore18HTMLDocumentParser6appendERKNS_15SegmentedStringE - fun:_ZN7WebCore25DecodedDataDocumentParser5flushEPNS_14DocumentWriterE - fun:_ZN7WebCore14DocumentWriter3endEv - fun:_ZN7WebCore14DocumentLoader15finishedLoadingEv -} -{ - bug_171722 - Memcheck:Leak - fun:_Znw* - fun:_ZN3net12_GLOBAL__N_120URLRequestFtpJobTest9AddSocketEPNS_13MockReadWriteILNS_17MockReadWriteTypeE0EEEmPNS2_ILS3_1EEEm -} -{ - bug_172005 - Memcheck:Leak - fun:_Znw* - fun:_ZN7leveldb10VersionSet11LogAndApplyEPNS_11VersionEditEPNS_4port5MutexE - fun:_ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_ - fun:_ZN11dom_storage22SessionStorageDatabase9TryToOpenEPPN7leveldb2DBE - fun:_ZN11dom_storage22SessionStorageDatabase8LazyOpenEb - fun:_ZN11dom_storage22SessionStorageDatabase24ReadNamespacesAndOriginsEPSt3mapISsSt6vectorI4GURLSaIS3_EESt4lessISsESaISt4pairIKSsS5_EEE - fun:_ZN11dom_storage17DomStorageContext36FindUnusedNamespacesInCommitSequenceERKSt3setISsSt4lessISsESaISsEES7_ -} -{ - bug_172005b - Memcheck:Leak - fun:_Znw* - fun:_ZN7leveldb6DBImplC1ERKNS_7OptionsERKSs - fun:_ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_ - fun:_ZN11dom_storage22SessionStorageDatabase9TryToOpenEPPN7leveldb2DBE - fun:_ZN11dom_storage22SessionStorageDatabase8LazyOpenEb - fun:_ZN11dom_storage22SessionStorageDatabase24ReadNamespacesAndOriginsEPSt3mapISsSt6vectorI4GURLSaIS3_EESt4lessISsESaISt4pairIKSsS5_EEE - fun:_ZN11dom_storage17DomStorageContext36FindUnusedNamespacesInCommitSequenceERKSt3setISsSt4lessISsESaISsEES7_ -} -{ - bug_172025 - Memcheck:Uninitialized - fun:_ZN11WebViewHost19didCreateDataSourceEPN5blink8WebFrameEPNS0_13WebDataSourceE - fun:_ZN5blink21FrameLoaderClientImpl20createDocumentLoaderERKN7WebCore15ResourceRequestERKNS1_14SubstituteDataE - fun:_ZN7WebCore11FrameLoader4initEv - fun:_ZN7WebCore5Frame4initEv - fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPN7WebCore4PageE - fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE - fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgentPN13WebTestRunner17WebTestInterfacesE - fun:_ZN9TestShell16createMainWindowEv - fun:_ZN9TestShell10initializeEv -} -{ - bug_173096 - Memcheck:Uninitialized - fun:bcmp - fun:_ZN2cc19LayerTreeDebugState5equalERKS0_S2_ - fun:_ZN2cc13LayerTreeHost13setDebugStateERKNS_19LayerTreeDebugStateE - fun:_ZN5blink20WebLayerTreeViewImpl*set* - fun:_ZN5blink11WebViewImpl33setIsAcceleratedCompositingActiveEb - fun:_ZN5blink11WebViewImpl20setRootGraphicsLayerEPN7WebCore13GraphicsLayerE - fun:_ZN5blink16ChromeClientImpl23attachRootGraphicsLayerEPN7WebCore5FrameEPNS1_13GraphicsLayerE - fun:_ZN7WebCore21RenderLayerCompositor15attachRootLayerENS0_19RootLayerAttachmentE - fun:_ZN7WebCore21RenderLayerCompositor15ensureRootLayerEv - fun:_ZN7WebCore21RenderLayerCompositor21enableCompositingModeEb - fun:_ZN7WebCore21RenderLayerCompositor13updateBackingEPNS_11RenderLayerENS0_24CompositingChangeRepaintE - fun:_ZN7WebCore21RenderLayerCompositor27updateLayerCompositingStateEPNS_11RenderLayerENS0_24CompositingChangeRepaintE - fun:_ZN7WebCore11RenderLayer12styleChangedENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore22RenderLayerModelObject14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE - fun:_ZN7WebCore9RenderBox14styleDidChangeENS_15StyleDifferenceEPKNS_11RenderStyleE -} -{ - bug_175100 - Memcheck:Leak - ... - fun:_ZN20OneClickSigninHelper14DidStopLoadingEPN7content14RenderViewHostE - fun:_ZN*OneClickSigninHelperTest* -} -{ - bug_175815 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base5Value18CreateIntegerValueEi - fun:_ZNK4base16FundamentalValue8DeepCopyEv - fun:_ZN4base8internal12_GLOBAL__N_125DictionaryHiddenRootValue26RemoveWithoutPathExpansionERKSsPPNS_5ValueE - fun:_ZN4base15DictionaryValue6RemoveERKSsPPNS_5ValueE - fun:_ZN32PluginFinderTest_JsonSyntax_Test8TestBodyEv -} -{ - bug_175823 - Memcheck:Leak - ... - fun:_ZN18ValueStoreFrontend* -} -{ - bug_175985 - Memcheck:Uninitialized - fun:_ZN2cc13LayerTreeHost13setDebugStateERKNS_19LayerTreeDebugStateE - ... - fun:_ZN5blink20WebLayerTreeViewImpl* -} -{ - bug_176270 - Memcheck:Uninitialized - fun:_ZNK2cc19LayerTreeDebugState20recordRenderingStatsEv -} -{ - bug_176616_a - Memcheck:Uninitialized - fun:_ZN13WebTestRunner16WebTestProxyBase19didCreateDataSourceEPN5blink8WebFrameEPNS1_13WebDataSourceE - fun:_ZN13WebTestRunner12WebTestProxyI11WebViewHostP9TestShellE19didCreateDataSourceEPN5blink8WebFrameEPNS5_13WebDataSourceE - fun:_ZN5blink21FrameLoaderClientImpl20createDocumentLoaderERKN7WebCore15ResourceRequestERKNS1_14SubstituteDataE - fun:_ZN7WebCore11FrameLoader4initEv - fun:_ZN7WebCore5Frame4initEv - fun:_ZN5blink12WebFrameImpl21initializeAsMainFrameEPN7WebCore4PageE - fun:_ZN5blink11WebViewImpl19initializeMainFrameEPNS_14WebFrameClientE - fun:_ZN9TestShell15createNewWindowERKN5blink6WebURLEP16DRTDevToolsAgentPN13WebTestRunner17WebTestInterfacesE - fun:_ZN9TestShell16createMainWindowEv - fun:_ZN9TestShell10initializeEP25MockWebKitPlatformSupport -} -{ - bug_176616_b - Memcheck:Uninitialized - fun:_ZN13WebTestRunner10TestRunner5resetEv - fun:_ZN13WebTestRunner14TestInterfaces8resetAllEv - fun:_ZN13WebTestRunner17WebTestInterfaces8resetAllEv - fun:_ZN9TestShell19resetTestControllerEv - fun:_ZL7runTestR9TestShellR10TestParamsRKSsb -} -{ - bug_176619_a - Memcheck:Uninitialized - fun:_ZN3WTF6StringC1EPKt - fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE - fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE - fun:_ZN7WebCore12TextTrackCue20createWebVTTNodeTreeEv - fun:_ZN7WebCore12TextTrackCue22createCueRenderingTreeEv - fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf -} -{ - bug_176619_b - Memcheck:Uninitialized - fun:_ZN7WebCore12WebVTTParser13collectDigitsERKN3WTF6StringEPj - fun:_ZN7WebCore12WebVTTParser16collectTimeStampERKN3WTF6StringEPj - fun:_ZN7WebCore12WebVTTParser22constructTreeFromTokenEPNS_8DocumentE - fun:_ZN7WebCore12WebVTTParser33createDocumentFragmentFromCueTextERKN3WTF6StringE - fun:_ZN7WebCore12TextTrackCue20createWebVTTNodeTreeEv - fun:_ZN7WebCore12TextTrackCue22createCueRenderingTreeEv - fun:_ZN7WebCore12TextTrackCue17updateDisplayTreeEf -} -{ - bug_176621 - Memcheck:Leak - fun:_Znw* - fun:_ZN13WebTestRunner10TestPlugin6createEPN5blink8WebFrameERKNS1_15WebPluginParamsEPNS_15WebTestDelegateE - fun:_ZN13WebTestRunner16WebTestProxyBase12createPluginEPN5blink8WebFrameERKNS1_15WebPluginParamsE - fun:_ZN13WebTestRunner12WebTestProxyI11WebViewHostP9TestShellE12createPluginEPN5blink8WebFrameERKNS5_15WebPluginParamsE - fun:_ZN5blink21FrameLoaderClientImpl12createPluginERKN7WebCore7IntSizeEPNS1_17HTMLPlugInElementERKNS1_4KURLERKN3WTF6VectorINSA_6String* - fun:_ZN7WebCore14SubframeLoader10loadPluginEPNS_22HTMLPlugInImageElementERKNS_4KURLERKN3WTF6StringERKNS6_6VectorIS7* -} -{ - bug_176888 - Memcheck:Leak - fun:malloc - fun:strdup - fun:p11_kit_registered_module_to_name - fun:gnutls_pkcs11_init - fun:gnutls_global_init - fun:_ZN12_GLOBAL__N_117GcryptInitializer4InitEv - fun:_ZN12_GLOBAL__N_117GcryptInitializerC1Ev - fun:_ZN4base25DefaultLazyInstanceTraitsIN12_GLOBAL__N_117GcryptInitializerEE3NewEPv -} -{ - bug_176889_a - Memcheck:Uninitialized - fun:inflateReset2 - fun:inflateInit2_ - fun:png_create_read_struct_2 - obj:/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so - obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1 - fun:gdk_pixbuf_loader* -} -{ - bug_176889_b - Memcheck:Uninitialized - fun:sse2_composite_over_8888_8888 - ... - fun:gdk_pixbuf_loader_close -} -{ - bug_176889_c - Memcheck:Uninitialized - fun:sse2_combine_over_u - ... - fun:gdk_pixbuf_loader_close -} -{ - bug_176889_d - Memcheck:Uninitialized - obj:*/librsvg-2.so* - fun:rsvg_handle_get_pixbuf_sub - obj:*/libpixbufloader-svg.so - fun:gdk_pixbuf_loader_close -} -{ - bug_176889_e - Memcheck:Uninitialized - fun:gdk_pixbuf_saturate_and_pixelate -} -{ - bug_176889_f - Memcheck:Uninitialized - fun:cache_magic_matchlet_compare - fun:__gio_xdg_cache_get_mime_type_for_data - fun:g_content_type_guess - obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1 - obj:/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0.2600.1 - fun:gdk_pixbuf_loader_close -} -{ - bug_176891a - Memcheck:Leak - fun:calloc - fun:nss_ZAlloc - fun:nssCryptokiObject_Create - fun:create_objects_from_handles - fun:find_objects - fun:find_objects_by_template - fun:nssToken_FindCertificateByEncodedCertificate - fun:PK11_FindCertFromDERCertItem - fun:_ZN24mozilla_security_manager12_GLOBAL__N_125nsPKCS12Blob_ImportHelper* -} -{ - bug_176891b - Memcheck:Leak - ... - fun:nssPKIObject_Create - fun:nssTrustDomain_FindTrustForCertificate - fun:STAN_DeleteCertTrustMatchingSlot - fun:SEC_DeletePermCertificate - ... - fun:_ZN3net15NSSCertDatabase16DeleteCertAndKeyEPKNS_15X509CertificateE -} -{ - bug_177213 - Memcheck:Leak - ... - fun:_ZN10extensionsL9SerializeERKSt6vectorINS_10UserScriptESaIS1_EE -} -{ - bug_179758_a - Memcheck:Leak - fun:_Znw* - fun:_ZN4base54WeakPtrTest_NonOwnerThreadCanCopyAndAssignWeakPtr_Test8TestBodyEv -} -{ - bug_179758_b - Memcheck:Leak - fun:_Znw* - fun:_ZN4base58WeakPtrTest_NonOwnerThreadCanCopyAndAssignWeakPtrBase_Test8TestBodyEv -} -{ - bug_180381 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN4base8FilePath31StripTrailingSeparatorsInternalEv - fun:_ZNK4base8FilePath7DirNameEv - fun:_ZN11dom_storage18DomStorageDatabase18GetJournalFilePathERKN4base8FilePathE - fun:_ZN11dom_storage27LocalStorageDatabaseAdapter11DeleteFilesEv - fun:_ZN11dom_storage14DomStorageArea12DeleteOriginEv - fun:_ZN11dom_storage19DomStorageNamespace24DeleteLocalStorageOriginERK4GURL - fun:_ZN11dom_storage17DomStorageContext18DeleteLocalStorageERK4GURL -} -{ - bug_181038 - Memcheck:Leak - ... - fun:_ZN3gfx9GLApiBase17glCompileShaderFnEj - fun:_ZN3gpu5gles214ProgramManager18ForceCompileShaderEPKSsPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE - fun:_ZN3gpu5gles214ProgramManager15DoCompileShaderEPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE - fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj -} -{ - bug_181038_link - Memcheck:Leak - fun:malloc - ... - fun:_ZN3gfx9GLApiBase15glLinkProgramFnEj - fun:_ZN3gpu5gles27Program4LinkEPNS0_13ShaderManagerEPNS0_16ShaderTranslatorES5_PNS0_11FeatureInfoE - fun:_ZN3gpu5gles216GLES2DecoderImpl13DoLinkProgramEj - fun:_ZN3gpu5gles216GLES2DecoderImpl17HandleLinkProgramEjRKNS0_4cmds11LinkProgramE - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv - fun:_ZN3gpu12GpuScheduler10PutChangedEv - fun:_ZN6webkit3gpu18GLInProcessContext12PumpCommandsEv -} -{ - bug_181082 - Memcheck:Leak - fun:_Znw* - fun:_ZN12_GLOBAL__N_124ResourceLoaderBridgeImpl5StartEPN11webkit_glue20ResourceLoaderBridge4PeerE - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE - fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE - fun:_ZN7WebCore22ResourceHandleInternal5start* - ... - fun:_ZN7WebCore14CachedResource4loadEPNS_20CachedResourceLoaderERKNS_21ResourceLoaderOptionsE - fun:_ZN7WebCore20CachedResourceLoader15requestResourceENS_14CachedResource4TypeERNS_21CachedResourceRequestE -} -{ - bug_181680 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11ScriptState10forContextEN2v85LocalINS1_7ContextEEE - fun:_ZN7WebCore17ScriptDebugServer12breakProgramEN2v86HandleINS1_6ObjectEEENS2_INS1_5ValueEEE - fun:_ZN7WebCore17ScriptDebugServer18handleV8DebugEventERKN2v85Debug12EventDetailsE - fun:_ZN7WebCore17ScriptDebugServer20v8DebugEventCallbackERKN2v85Debug12EventDetailsE - fun:_ZN2v88internal8Debugger18CallCEventCallbackENS_10DebugEventENS0_6HandleINS0_6ObjectEEES5_PNS_5Debug10ClientDataE -} -{ - bug_181680b - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE - fun:_ZN7WebCore17ScriptDebugServer18handleProgramBreakEN2v86HandleINS1_6ObjectEEENS2_INS1_5ValueEEENS2_INS1_5ArrayEEE -} -{ - bug_184264 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore24createDragImageFromImageEPNS_5ImageENS_27RespectImageOrientationEnumE - fun:_ZN7WebCore5Frame21dragImageForSelectionEv - fun:_ZN7WebCore27createDragImageForSelectionEPNS_5FrameE - fun:_ZN7WebCore14DragController9startDragEPNS_5FrameERKNS_9DragStateENS_13DragOperationERKNS_18PlatformMouseEventERKNS_8IntPointE - fun:_ZN7WebCore12EventHandler10handleDragERKNS_28MouseEventWithHitTestResultsENS_19CheckDragHysteresisE - fun:_ZN7WebCore12EventHandler23handleMouseDraggedEventERKNS_28MouseEventWithHitTestResultsE - fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb - fun:_ZN7WebCore12EventHandler28passMouseMoveEventToSubframeERNS_28MouseEventWithHitTestResultsEPNS_5FrameEPNS_13HitTestResultE - fun:_ZN7WebCore12EventHandler20handleMouseMoveEventERKNS_18PlatformMouseEventEPNS_13HitTestResultEb - fun:_ZN7WebCore12EventHandler10mouseMovedERKNS_18PlatformMouseEventE -} -{ - bug_195160_a - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIiEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE14_M_create_nodeERKi - fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE10_M_insert_EPKSt18_Rb_tree_node_baseS8_RKi - fun:_ZNSt8_Rb_treeIiiSt9_IdentityIiESt4lessIiESaIiEE16_M_insert_uniqueERKi - fun:_ZNSt3setIiSt4lessIiESaIiEE6insertERKi - fun:_ZN10extensions10URLMatcher14UpdateTriggersEv - fun:_ZN10extensions10URLMatcher28UpdateInternalDatastructuresEv - fun:_ZN10extensions10URLMatcher16AddConditionSetsERKSt6vectorI13scoped_refptrINS_22URLMatcherConditionSetEESaIS4_EE - fun:_ZN12_GLOBAL__N_113FilterBuilder5BuildEv - fun:_ZN12_GLOBAL__N_134LoadWhitelistsOnBlockingPoolThreadE12ScopedVectorI19ManagedModeSiteListE -} -{ - bug_195160_b - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeIPN10extensions13StringPatternEEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE14_M_create_nodeERKS2_ - fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE10_M_insert_EPKSt18_Rb_tree_node_baseSB_RKS2_ - fun:_ZNSt8_Rb_treeIPN10extensions13StringPatternES2_St9_IdentityIS2_ENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE16_M_insert_uniqueERKS2_ - fun:_ZNSt3setIPN10extensions13StringPatternENS0_26URLMatcherConditionFactory27StringPatternPointerCompareESaIS2_EE6insertERKS2_ - fun:_ZN10extensions26URLMatcherConditionFactory15CreateConditionENS_19URLMatcherCondition9CriterionERKSs - fun:_ZN10extensions26URLMatcherConditionFactory35CreateHostSuffixPathPrefixConditionERKSsS2_ - fun:_ZN6policy12URLBlacklist18CreateConditionSetEPN10extensions10URLMatcherEiRKSsS5_btS5_ - fun:_ZN12_GLOBAL__N_113FilterBuilder10AddPatternERKSsi - fun:_ZN12_GLOBAL__N_113FilterBuilder11AddSiteListEP19ManagedModeSiteList - fun:_ZN12_GLOBAL__N_134LoadWhitelistsOnBlockingPoolThreadE12ScopedVectorI19ManagedModeSiteListE -} -{ - bug_195160_c - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN4base26PostTaskAndReplyWithResultI10scoped_ptrIN20ManagedModeURLFilter8ContentsENS_14DefaultDeleterIS3_EEES6_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNSD_IFvT0_EEE - fun:_ZN20ManagedModeURLFilter14LoadWhitelistsE12ScopedVectorI19ManagedModeSiteListE -} -{ - bug_222363 - Memcheck:Leak - fun:_Znw* - fun:_ZN18WebDatabaseService12LoadDatabaseERKN4base8CallbackIFvN3sql10InitStatusEEEE -} -{ - bug_222876 - Memcheck:Leak - fun:_Znw* - fun:_ZN21WebDataServiceWrapperC1EP7Profile - fun:_ZNK21WebDataServiceFactory23BuildServiceInstanceForEPN7content14BrowserContextE - fun:_ZN33BrowserContextKeyedServiceFactory27GetServiceForBrowserContextEPN7content14BrowserContextEb - fun:_ZN21WebDataServiceFactory13GetForProfileEP7ProfileNS0_17ServiceAccessTypeE - ... - fun:_ZN12TokenService10InitializeEPKcP7Profile -} -{ - bug_222880 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF16VectorBufferBaseINS_6RefPtrIN7WebCore7ArchiveEEEE14allocateBufferEm - ... - fun:_ZN7WebCore7Archive18addSubframeArchiveEN3WTF10PassRefPtrIS0_EE - fun:_ZN7WebCore11MHTMLParser22parseArchiveWithHeaderEPNS_10MIMEHeaderE - fun:_ZN7WebCore11MHTMLParser12parseArchiveEv - fun:_ZN7WebCore12MHTMLArchive6createERKNS_4KURLEPNS_12SharedBufferE -} -{ - bug_222883 - Memcheck:Uninitialized - fun:_ZN2v88internal15ScavengeVisitor15ScavengePointerEPPNS0_6ObjectE.isra.* - fun:_ZN2v88internal15ScavengeVisitor13VisitPointersEPPNS0_6ObjectES4_ - fun:_ZNK2v88internal13StandardFrame18IterateExpressionsEPNS0_13ObjectVisitorE - ... - fun:_ZN2v88internal4Heap8ScavengeEv - fun:_ZN2v88internal4Heap24PerformGarbageCollectionENS0_16GarbageCollectorEPNS0_8GCTracer* -} -{ - bug_222887 - Memcheck:Leak - fun:_Znw* - fun:_ZN6webkit3gpu18GLInProcessContext10InitializeERKN3gfx4SizeEPS1_PKcPKiNS2_13GpuPreferenceE - fun:_ZN6webkit3gpu18GLInProcessContext22CreateOffscreenContextEPS1_RKN3gfx4SizeES2_PKcPKiNS3_13GpuPreferenceE - fun:_ZN6webkit3gpu46WebGraphicsContext3DInProcessCommandBufferImpl10InitializeEN5blink20WebGraphicsContext3D10AttributesEPS3_ - fun:_ZN25TestWebKitPlatformSupport32createOffscreenGraphicsContext3DERKN5blink20WebGraphicsContext3D10AttributesE - fun:_ZN7WebCore17GraphicsContext3D6createENS0_10AttributesEPNS_10HostWindowENS0_11RenderStyleE -} -{ - bug_222898 - Memcheck:Leak - fun:malloc - ... - fun:_ZN3WTF9BitVector13OutOfLineBits6createEm - fun:_ZN3WTF9BitVector15resizeOutOfLineEm - fun:_ZN3WTF9BitVector10ensureSizeEm - fun:_ZN3WTF9BitVectorC1Em - fun:_ZN7WebCore10UseCounter10didObserveENS0_7FeatureE - fun:_ZN7WebCore10UseCounter7observeEPNS_8DocumentENS0_7FeatureE -} -{ - bug_224747 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - ... - fun:_ZN64BackgroundApplicationListModelTest_AddRemovePermissionsTest_Test8TestBodyEv -} -{ - bug_225028 - Memcheck:Leak - fun:_Znw* - fun:_ZN31SafeBrowsingDatabaseFactoryImpl26CreateSafeBrowsingDatabaseEbbbb - fun:_ZN20SafeBrowsingDatabase6CreateEbbbb - fun:_ZN27SafeBrowsingDatabaseManager11GetDatabaseEv -} -{ - bug_225596 - Memcheck:Leak - fun:_Znw* - fun:_ZN8chromeos12input_method22InputMethodManagerImpl4InitERK13scoped_refptrIN4base19SequencedTaskRunnerEES7_ - fun:_ZN8chromeos12input_method10InitializeERK13scoped_refptrIN4base19SequencedTaskRunnerEES6_ - fun:_ZN8chromeos12input_method48InputMethodConfigurationTest_TestInitialize_Test8TestBodyEv -} -{ - bug_226254 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMN10extensions16UserScriptMaster14ScriptReloader* - fun:_ZN10extensions16UserScriptMaster14ScriptReloader9StartLoad* - fun:_ZN10extensions16UserScriptMaster9StartLoadEv - fun:_ZN10extensions16UserScriptMaster7ObserveEiRKN7content18NotificationSourceERKNS1_19NotificationDetailsE -} -{ - bug_227278a - Memcheck:Uninitialized - ... - fun:_ZN7content35CompositingIOSurfaceTransformerTest13RunResizeTestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE - fun:_ZN7content65CompositingIOSurfaceTransformerTest_ResizesTexturesCorrectly_Test8TestBodyEv -} -{ - bug_227278b - Memcheck:Uninitialized - ... - fun:_ZN7content35CompositingIOSurfaceTransformerTest25RunTransformRGBToYV12TestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE - fun:_ZN7content60CompositingIOSurfaceTransformerTest_TransformsRGBToYV12_Test8TestBodyEv -} -{ - bug_227278c - Memcheck:Uninitialized - fun:BitSetNextSetBit - fun:RegistersReInterfere - fun:RegistersMerge - fun:glpPPShaderLinearizeStreamMgr - fun:glpPPShaderLinearize - fun:glePrepareShaderForEmulation - fun:gleSetVPTransformFuncAll - fun:gleVPRenderQuadsSmooth - fun:gleDrawArraysOrElements_ExecCore - fun:glDrawArrays_Exec - fun:glDrawArrays - fun:_ZN7content12_GLOBAL__N_18DrawQuadEffffbff - fun:_ZN7content31CompositingIOSurfaceTransformer14ResizeBilinearEjRKN3gfx4RectERKNS1_4SizeEPj - fun:_ZN7content35CompositingIOSurfaceTransformerTest13RunResizeTestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE - fun:_ZN7content65CompositingIOSurfaceTransformerTest_ResizesTexturesCorrectly_Test8TestBodyEv -} -{ - bug_227278d - Memcheck:Uninitialized - fun:glViewport_Exec - fun:glViewport - fun:_ZN7content12_GLOBAL__N_139SetTransformationsForOffScreenRenderingERKN3gfx4SizeE - fun:_ZN7content31CompositingIOSurfaceTransformer18TransformRGBToYV12EjRKN3gfx4RectERKNS1_4SizeEPjS8_S8_PS5_S9_ - fun:_ZN7content35CompositingIOSurfaceTransformerTest25RunTransformRGBToYV12TestERK8SkBitmapRKN3gfx4RectERKNS4_4SizeE - fun:_ZN7content60CompositingIOSurfaceTransformerTest_TransformsRGBToYV12_Test8TestBodyEv -} -{ - bug_227278e - Memcheck:Free - fun:_ZdlPv - fun:_ZN12BindingTableD2Ev - fun:_ZN14TGenericLinkerD0Ev - fun:ShDestruct - fun:gleFreeProgramObject - fun:gleUnbindDeleteHashNameAndObject - fun:glDeleteObjectARB_Exec - fun:glDeleteProgram - fun:_ZN7content34CompositingIOSurfaceShaderPrograms5ResetEv - fun:_ZN7content35CompositingIOSurfaceTransformerTestD2Ev - fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD2Ev - fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD1Ev - fun:_ZN7content69CompositingIOSurfaceTransformerTest_ShaderProgramsCompileAndLink_TestD0Ev - fun:_ZN7testing4Test11DeleteSelf_Ev -} -{ - bug_233541 - Memcheck:Leak - fun:_Znw* - fun:_ZN22DiskCacheTestWithCache13CreateBackendEjPN4base6ThreadE - fun:_ZN22DiskCacheTestWithCache13InitDiskCacheEv - fun:_ZN22DiskCacheTestWithCache9InitCacheEv - fun:*DiskCacheBackendTest_SimpleDoom* -} -{ - bug_234845 - Memcheck:Leak - fun:malloc - fun:PORT_Alloc_Util - fun:pk11_CreateSymKey - fun:PK11_KeyGenWithTemplate - fun:pk11_TokenKeyGenWithFlagsAndKeyType - fun:pk11_RawPBEKeyGenWithKeyType - fun:PK11_PBEKeyGen - fun:PK11_ExportEncryptedPrivKeyInfo - fun:_ZN6crypto12ECPrivateKey25ExportEncryptedPrivateKeyERKSsiPSt6vectorIhSaIhEE -} -{ - bug_235584 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4Bind* - fun:_ZN3net18SSLClientSocketNSS4Core21OnHandshakeIOCompleteEi - fun:_ZN3net18SSLClientSocketNSS4Core28OnGetDomainBoundCertCompleteEi -} -{ - bug_236791 - Memcheck:Leak - fun:_Znw* - fun:_ZN3ash4test53FocusCyclerTest_CycleFocusThroughWindowWithPanes_Test8TestBodyEv -} -{ - bug_238170a - Memcheck:Uninitialized - fun:_ZN7WebCore20ElementRuleCollector20collectMatchingRulesERKNS_12MatchRequestERNS_13StyleResolver9RuleRangeE - fun:_ZN7WebCore20ElementRuleCollector19hasAnyMatchingRulesEPNS_7RuleSetE -} -{ - bug_238170b - Memcheck:Uninitialized - fun:_ZN7WebCore20ElementRuleCollector20collectMatchingRulesERKNS_12MatchRequestERNS_13StyleResolver9RuleRangeE - fun:_ZN7WebCore13StyleResolver16matchAuthorRulesERNS_20ElementRuleCollectorEb -} -{ - bug_238170c - Memcheck:Uninitialized - fun:_ZN7WebCore23ReplaceSelectionCommand7doApplyEv - fun:_ZN7WebCore20CompositeEditCommand5applyEv - fun:_ZN7WebCore12applyCommandEN3WTF10PassRefPtrINS_20CompositeEditCommandEEE -} -{ - bug_238547 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIPN4base11PendingTaskEE8allocateEmPKv - fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE15_M_allocate_mapEm - fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE17_M_reallocate_mapEmb - fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE22_M_reserve_map_at_backEm - fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE16_M_push_back_auxERKS1_ - fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE9push_backERKS1_ - fun:_ZNSt5queueIN4base11PendingTaskESt5dequeIS1_SaIS1_EEE4pushERKS1_ - ... - fun:_ZN4base*MessageLoop*15PostDelayedTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaE -} -{ - bug_239141 - Memcheck:Leak - fun:malloc - ... - fun:_ZN3WTF9BitVector13OutOfLineBits6createEm - fun:_ZN3WTF9BitVector15resizeOutOfLineEm - fun:_ZN3WTF9BitVector10ensureSizeEm - fun:_ZN3WTF9BitVectorC1Em - fun:_ZN7WebCore10UseCounter17recordMeasurementENS0_7FeatureE -} -{ - bug_241044 - Memcheck:Uninitialized - fun:_ZN7WebCore8Settings29setOpenGLMultisamplingEnabledEb - fun:_ZN5blink15WebSettingsImpl29setOpenGLMultisamplingEnabledEb - fun:_ZN7content19ApplyWebPreferencesERK14WebPreferencesPN5blink7WebViewE - fun:_ZN7content14RenderViewImpl22OnUpdateWebPreferencesERK14WebPreferences - fun:_ZN7content14RenderViewImpl20SetWebkitPreferencesERK14WebPreferences -} -{ - bug_241892a - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE - fun:_ZN7WebCore11CSSSelector14createRareDataEv - ... - fun:_Z10cssyyparsePN7WebCore9CSSParserE - fun:_ZN7WebCore9CSSParser10parseSheetEPNS_18StyleSheetContentsE* - fun:_ZN7WebCore18StyleSheetContents17parseStringAtLineERKN3WTF6StringEib - fun:_ZN7WebCore12StyleElement11createSheetE* - fun:_ZN7WebCore12StyleElement7processEPNS_7ElementE -} -{ - bug_241892b - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE - fun:_ZN7WebCore11CSSSelector14createRareDataEv - ... - fun:_Z10cssyyparsePN7WebCore9CSSParserE - fun:_ZN7WebCore9CSSParser13parseSelectorERKN3WTF6StringERNS_15CSSSelectorListE -} -{ - bug_241892c - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_16AtomicStringImplEEE - fun:_ZN7WebCore11CSSSelector14createRareDataEv - fun:_ZN7WebCore11CSSSelector12setAttributeERKNS_13QualifiedNameE - fun:_ZN7WebCore17CSSParserSelector12setAttributeERKNS_13QualifiedNameE - fun:_Z10cssyyparsePN7WebCore9CSSParserE - fun:_ZN7WebCore9CSSParser10parseSheetEPNS_18StyleSheetContentsERKN3WTF6StringERKNS3_12TextPositionEPNS0_17SourceDataHandlerEb - fun:_ZN7WebCore18StyleSheetContents21parseStringAtPositionERKN3WTF6StringERKNS1_12TextPositionEb - fun:_ZN7WebCore12StyleElement11createSheetEPNS_7ElementERKN3WTF6StringE - fun:_ZN7WebCore12StyleElement7processEPNS_7ElementE - fun:_ZN7WebCore12StyleElement17processStyleSheetEPNS_8DocumentEPNS_7ElementE - fun:_ZN7WebCore16HTMLStyleElement26didNotifySubtreeInsertionsEPNS_13ContainerNodeE - fun:_ZN7WebCore26ChildNodeInsertionNotifier6notifyEPNS_4NodeE - fun:_ZN7WebCoreL24updateTreeAfterInsertionEPNS_13ContainerNodeEPNS_4NodeENS_14AttachBehaviorE - fun:_ZN7WebCore13ContainerNode11appendChildEN3WTF10PassRefPtrINS_4NodeEEERiNS_14AttachBehaviorE - fun:_ZN7WebCore4Node11appendChildEN3WTF10PassRefPtrIS0_EERiNS_14AttachBehaviorE - fun:_ZN7WebCore6V8Node23appendChildMethodCustomERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore14NodeV8InternalL37appendChildMethodCallbackForMainWorldERKN2v820FunctionCallbackInfoINS1_5ValueEEE -} -{ - bug_241892d - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10RefCountedIN7WebCore11CSSSelector8RareDataEEnwEm - fun:_ZN7WebCore11CSSSelector8RareData6createEN3WTF10PassRefPtrINS2_10StringImplEEE - fun:_ZN7WebCore11CSSSelector14createRareDataEv - ... - fun:_Z10cssyyparsePN7WebCore9CSSParserE -} -{ - bug_241932 - Memcheck:Leak - fun:calloc - fun:_ZN3WTF13tryFastCallocEmm - fun:_ZN3WTF9RawBufferC1EjjNS0_20InitializationPolicyE - fun:_ZN3WTF19ArrayBufferContentsC1EjjNS_9RawBuffer20InitializationPolicyE - fun:_ZN3WTF11ArrayBuffer6createEPKvj - fun:_ZN7WebCore12_GLOBAL__N_16Reader17doReadArrayBufferEv - fun:_ZN7WebCore12_GLOBAL__N_16Reader15readArrayBufferEPN2v86HandleINS2_5ValueEEE - fun:_ZN7WebCore12_GLOBAL__N_16Reader4readEPN2v86HandleINS2_5ValueEEERNS0_16CompositeCreatorE - fun:_ZN7WebCore12_GLOBAL__N_112Deserializer13doDeserializeEv - fun:_ZN7WebCore12_GLOBAL__N_112Deserializer11deserializeEv - fun:_ZN7WebCore21SerializedScriptValue11deserializeEPN2v87IsolateEPN3WTF6VectorINS4_6RefPtrINS_11MessagePortEEELm1EEE - fun:_ZN7WebCore14V8MessageEvent20dataAttrGetterCustomEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE - fun:_ZN7WebCore22MessageEventV8InternalL22dataAttrGetterCallbackEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE -} -{ - bug_242672 - Memcheck:Leak - fun:malloc - ... - fun:_ZN3WTF9BitVector13OutOfLineBits6createEm - fun:_ZN3WTF9BitVector15resizeOutOfLineEm - fun:_ZN3WTF9BitVector10ensureSizeEm - fun:_ZN7WebCore10UseCounterC1Ev - fun:_ZN7WebCore4PageC1ERNS0_11PageClientsE -} -{ - bug_243132 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10StringImpl19createUninitializedEjRPh - ... - fun:_ZN7WebCoreL24valueForGridTrackBreadthERKNS_10GridLengthEPKNS_11RenderStyleEPNS_10RenderViewE - fun:_ZN7WebCoreL21valueForGridTrackSizeERKNS_13GridTrackSizeEPKNS_11RenderStyleEPNS_10RenderViewE - fun:_ZN7WebCoreL21valueForGridTrackListERKN3WTF6VectorINS_13GridTrackSizeELm0EEERKNS0_7HashMap* - fun:_ZNK7WebCore27CSSComputedStyleDeclaration19getPropertyCSSValueENS_13CSSPropertyIDENS_13EUpdateLayoutE - fun:_ZNK7WebCore27CSSComputedStyleDeclaration19getPropertyCSSValueENS_13CSSPropertyIDE - fun:_ZNK7WebCore27CSSComputedStyleDeclaration16getPropertyValueENS_13CSSPropertyIDE - fun:_ZN7WebCore27CSSComputedStyleDeclaration16getPropertyValueERKN3WTF6StringE -} -{ - bug_243137 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11RenderStyle6createEv - fun:_ZN7WebCore13StyleResolver15styleForElementEPNS_7ElementEPNS_11RenderStyle* - fun:_ZN7WebCore7Element16styleForRendererEv - fun:_ZN7WebCore20NodeRenderingContext32createRendererForElementIfNeededEv - fun:_ZN7WebCore7Element22createRendererIfNeededEv - fun:_ZN7WebCore7Element6attachEv - fun:_ZN7WebCore22HTMLPlugInImageElement6attachEv -} -{ - bug_243753 - Memcheck:Leak - fun:_Znw* - fun:_ZN7fileapi28SandboxFileSystemBackendTest11GetRootPathERK4GURLNS_14FileSystemTypeEbPN4base8FilePathE -} -{ - bug_245714 - Memcheck:Leak - fun:_Znw* - fun:_ZN7content17WorkerServiceImplC1Ev - fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv - fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv - fun:_ZN7content17WorkerServiceImpl11GetInstanceEv - fun:_ZN7content19WorkerMessageFilter16OnChannelClosingEv - fun:_ZN3IPC12ChannelProxy7Context15OnChannelClosedEv -} -{ - bug_245714b - Memcheck:Leak - fun:_Znw* - fun:_ZN7content17WorkerServiceImplC1Ev - fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv - fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv - fun:_ZN7content17WorkerServiceImpl11GetInstanceEv - fun:_ZN7content22ResourceRequestDetailsC1EPKN3net10URLRequestEi - fun:_ZN7content26ResourceDispatcherHostImpl18DidReceiveResponseEPNS_14ResourceLoaderE - fun:_ZN7content14ResourceLoader23CompleteResponseStartedEv - fun:_ZN7content14ResourceLoader17OnResponseStartedEPN3net10URLRequestE - fun:_ZN3net10URLRequest21NotifyResponseStartedEv -} -{ - bug_245714c - Memcheck:Leak - fun:_Znw* - fun:_ZN7content17WorkerServiceImplC1Ev - fun:_ZN22DefaultSingletonTraitsIN7content17WorkerServiceImplEE3NewEv - fun:_ZN9SingletonIN7content17WorkerServiceImplE22DefaultSingletonTraitsIS1_ES1_E3getEv - fun:_ZN7content17WorkerServiceImpl11GetInstanceEv - fun:_ZN7content22ResourceRequestDetailsC1EPKN3net10URLRequestEi - fun:_ZN7content23ResourceRedirectDetailsC1EPKN3net10URLRequestEiRK4GURL - fun:_ZN7content26ResourceDispatcherHostImpl18DidReceiveRedirectEPNS_14ResourceLoaderERK4GURL - fun:_ZN7content14ResourceLoader18OnReceivedRedirectEPN3net10URLRequestERK4GURLPb - fun:_ZN3net10URLRequest22NotifyReceivedRedirectERK4GURLPb - fun:_ZN3net13URLRequestJob21NotifyHeadersCompleteEv - fun:_ZN3net17URLRequestHttpJob21NotifyHeadersCompleteEv - fun:_ZN3net17URLRequestHttpJob14SaveNextCookieEv - fun:_ZN3net17URLRequestHttpJob35SaveCookiesAndNotifyHeadersCompleteEi - fun:_ZN3net17URLRequestHttpJob16OnStartCompletedEi -} -{ - bug_245828 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN7content13BrowserThread16PostTaskAndReplyENS0_2IDERKN15tracked_objects8LocationERKN4base8CallbackIFvvEEESB_ - fun:_ZN7content23DevToolsHttpHandlerImpl4StopEv - fun:_ZN7content21ShellDevToolsDelegate4StopEv - fun:_ZN7content21ShellBrowserMainParts22PostMainMessageLoopRunEv - fun:_ZN7content15BrowserMainLoop25ShutdownThreadsAndCleanUpEv - fun:_ZN7content21BrowserMainRunnerImpl8ShutdownEv - fun:_Z16ShellBrowserMainRKN7content18MainFunctionParams* - fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE -} -{ - bug_245866 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base23EnsureProcessTerminatedEi - fun:_ZN7content6Zygote17HandleReapRequestEiRK6Pickle14PickleIterator - fun:_ZN7content6Zygote24HandleRequestFromBrowserEi - fun:_ZN7content6Zygote15ProcessRequestsEv - fun:_ZN7content10ZygoteMainERKNS_18MainFunctionParamsEPNS_18ZygoteForkDelegateE - fun:_ZN7content9RunZygoteERKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE -} -{ - bug_246148 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN7content16SiteInstanceImpl10GetProcessEv - fun:_ZN7content18RenderViewHostImplC1EPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEiibPNS_23SessionStorageNamespaceE - fun:_ZN7content21RenderViewHostFactory6CreateEPNS_12SiteInstanceEPNS_22RenderViewHostDelegateEPNS_24RenderWidgetHostDelegateEiibPNS_23SessionStorageNamespaceE - fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii - fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE - fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE - fun:_ZN7content17WebContentsTester21CreateTestWebContentsEPNS_14BrowserContextEPNS_12SiteInstanceE - fun:_ZN8autofill12_GLOBAL__N_128AutofillDialogControllerTest5SetUpEv -} -{ - bug_246153 - Memcheck:Uninitialized - fun:_ZN7WebCore8Settings29setOpenGLMultisamplingEnabledEb - fun:_ZN5blink15WebSettingsImpl29setOpenGLMultisamplingEnabledEb - fun:_ZN7content19ApplyWebPreferencesERK14WebPreferencesPN5blink7WebViewE - ... - fun:_ZN7content14RenderViewImpl10InitializeEPNS_20RenderViewImplParamsE - fun:_ZN7content14RenderViewImpl6CreateE* - fun:_ZN7content16RenderThreadImpl15OnCreateNewViewERK18ViewMsg_New_Params -} -{ - bug_247525a - Memcheck:Leak - fun:_Znw* - fun:_ZN7fileapi24SandboxFileSystemBackendC1EPN5quota17QuotaManagerProxyEPN4base19SequencedTaskRunnerERKNS4_8FilePathERKNS_17FileSystemOptionsEPNS1_20SpecialStoragePolicyE - fun:_ZN7fileapi17FileSystemContextC1E10scoped_ptrINS_21FileSystemTaskRunnersEN4base14DefaultDeleterIS2_EEEPNS_19ExternalMountPointsEPN5quota20SpecialStoragePolicyEPNS9_17QuotaManagerProxyE12ScopedVectorINS_17FileSystemBackendEERKNS3_8FilePathERKNS_17FileSystemOptionsE - fun:_ZN7content23CreateFileSystemContextERKN4base8FilePathEbPN7fileapi19ExternalMountPointsEPN5quota20SpecialStoragePolicyEPNS7_17QuotaManagerProxyE - fun:_ZN7content20StoragePartitionImpl6CreateEPNS_14BrowserContextEbRKN4base8FilePathE - fun:_ZN7content23StoragePartitionImplMap3GetERKSsS2_b - fun:_ZN7content12_GLOBAL__N_129GetStoragePartitionFromConfigEPNS_14BrowserContextERKSsS4_b - fun:_ZN7content14BrowserContext19GetStoragePartitionEPS0_PNS_12SiteInstanceE - fun:_ZN7content24NavigationControllerImpl26GetSessionStorageNamespaceEPNS_12SiteInstanceE - fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii - fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE - fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE - fun:_ZN7content25RenderViewHostTestHarness21CreateTestWebContentsEv - fun:_ZN7content25RenderViewHostTestHarness5SetUpEv - fun:_ZN31ChromeRenderViewHostTestHarness5SetUpEv -} -{ - bug_247525b - Memcheck:Leak - fun:_Znw* - fun:_ZN8appcache19AppCacheStorageImpl10InitializeERKN4base8FilePathEPNS1_16MessageLoopProxyES6_ - fun:_ZN8appcache15AppCacheService10InitializeERKN4base8FilePathEPNS1_16MessageLoopProxyES6_ - fun:_ZN7content21ChromeAppCacheService20InitializeOnIOThreadERKN4base8FilePathEPNS_15ResourceContextEPN3net23URLRequestContextGetterE13scoped_refptrIN5quota20SpecialStoragePolicyEE -} -{ - bug_247525c - Memcheck:Leak - fun:_Znw* - fun:_ZN7content20StoragePartitionImpl6CreateEPNS_14BrowserContextEbRKN4base8FilePathE - fun:_ZN7content23StoragePartitionImplMap3GetERKSsS2_b - fun:_ZN7content12_GLOBAL__N_129GetStoragePartitionFromConfigEPNS_14BrowserContextERKSsS4_b - fun:_ZN7content14BrowserContext19GetStoragePartitionEPS0_PNS_12SiteInstanceE - fun:_ZN7content24NavigationControllerImpl26GetSessionStorageNamespaceEPNS_12SiteInstanceE - fun:_ZN7content22RenderFrameHostManager4InitEPNS_14BrowserContextEPNS_12SiteInstanceEii - fun:_ZN7content15WebContentsImpl4InitERKNS_11WebContents12CreateParamsE - fun:_ZN7content15TestWebContents6CreateEPNS_14BrowserContextEPNS_12SiteInstanceE - fun:_ZN7content25RenderViewHostTestHarness21CreateTestWebContentsEv - fun:_ZN7content25RenderViewHostTestHarness5SetUpEv - fun:_ZN31ChromeRenderViewHostTestHarness5SetUpEv -} -{ - bug_250529_a - Memcheck:Leak - fun:_Znw* - fun:_ZN14TestingProfile20CreateRequestContextEv - fun:_ZN12_GLOBAL__N_130ProfileSyncServiceTypedUrlTest5SetUpEv -} -{ - bug_250529_b - Memcheck:Leak - fun:_Znw* - fun:_ZN14TestingProfile20CreateRequestContextEv - fun:_ZN30ProfileSyncServicePasswordTest5SetUpEv -} -{ - bug_250533 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net21TestURLRequestContext4InitEv - fun:_ZN3net21TestURLRequestContextC1Ev - fun:_ZN3net27TestURLRequestContextGetter20GetURLRequestContextEv - fun:_ZN11jingle_glue26ProxyResolvingClientSocketC1EPN3net19ClientSocketFactoryERK13scoped_refptrINS1_23URLRequestContextGetterEERKNS1_9SSLConfigERKNS1_12HostPortPairE - fun:_ZN11jingle_glue23XmppClientSocketFactory27CreateTransportClientSocketERKN3net12HostPortPairE - fun:_ZN11jingle_glue17ChromeAsyncSocket7ConnectERKN9talk_base13SocketAddressE -} -{ - bug_250533_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3net18HttpNetworkSessionC1ERKNS0_6ParamsE - fun:_ZN11jingle_glue26ProxyResolvingClientSocketC1EPN3net19ClientSocketFactoryERK13scoped_refptrINS1_23URLRequestContextGetterEERKNS1_9SSLConfigERKNS1_12HostPortPairE - fun:_ZN11jingle_glue23XmppClientSocketFactory27CreateTransportClientSocketERKN3net12HostPortPairE - fun:_ZN11jingle_glue17ChromeAsyncSocket7ConnectERKN9talk_base13SocketAddressE -} -{ - bug_250688 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3net9HostCache3KeyES2_INS4_5EntryEN4base9TimeTicksEEEEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE14_M_create_nodeERKS9_ - fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE10_M_insert_EPKSt18_Rb_tree_node_baseSI_RKS9_ - fun:_ZNSt8_Rb_treeIN3net9HostCache3KeyESt4pairIKS2_S3_INS1_5EntryEN4base9TimeTicksEEESt10_Select1stIS9_ESt4lessIS2_ESaIS9_EE16_M_insert_uniqueERKS9_ - fun:_ZNSt3mapIN3net9HostCache3KeyESt4pairINS1_5EntryEN4base9TimeTicksEESt4lessIS2_ESaIS3_IKS2_S7_EEE6insertERKSB_ - fun:_ZN3net13ExpiringCacheINS_9HostCache3KeyENS1_5EntryEN4base9TimeTicksESt4lessIS5_ENS1_15EvictionHandlerEE3PutERKS2_RKS3_RKS5_SF_ - fun:_ZN3net9HostCache3SetERKNS0_3KeyERKNS0_5EntryEN4base9TimeTicksENS7_9TimeDeltaE - fun:_ZN3net20MockHostResolverBase11ResolveProcEmRKNS_12HostResolver11RequestInfoEPNS_11AddressListE - fun:_ZN3net20MockHostResolverBase10ResolveNowEm -} -{ - bug_251004_a - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN3net10FileStream7Context14CloseAndDeleteEv -} -{ - bug_251034 - Memcheck:Leak - ... - fun:_ZN3gpu5gles216ShaderTranslator4InitE12ShShaderType12ShShaderSpecPK18ShBuiltInResourcesNS0_25ShaderTranslatorInterface22GlslImplementationTypeENS7_27GlslBuiltInFunctionBehaviorE - fun:_ZN3gpu5gles221ShaderTranslatorCache13GetTranslatorE12ShShaderType12ShShaderSpecPK18ShBuiltInResourcesNS0_25ShaderTranslatorInterface22GlslImplementationTypeENS7_27GlslBuiltInFunctionBehaviorE - fun:_ZN3gpu5gles216GLES2DecoderImpl26InitializeShaderTranslatorEv - fun:_ZN3gpu5gles216GLES2DecoderImpl10InitializeERK13scoped_refptrIN3gfx9GLSurfaceEERKS2_INS3_9GLContextEEbRKNS3_4SizeERKNS0_18DisallowedFeaturesEPKcRKSt6vectorIiSaIiEE - fun:_ZN3gpu22InProcessCommandBuffer21InitializeOnGpuThreadEbmRKN3gfx4SizeEPKcRKSt6vectorIiSaIiEENS1_13GpuPreferenceE -} -{ - bug_252054 - Memcheck:Unaddressable - fun:_ZNK7WebCore32PlatformSpeechSynthesisUtterance6clientEv - fun:_ZN7WebCore15SpeechSynthesis17didFinishSpeakingEN3WTF10PassRefPtrINS_32PlatformSpeechSynthesisUtteranceEEE - fun:_ZN7WebCore29PlatformSpeechSynthesizerMock16speakingFinishedEPNS_5TimerIS0_EE - fun:_ZN7WebCore5TimerINS_29PlatformSpeechSynthesizerMockEE5firedEv - fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv - fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv -} -{ - bug_252036 - Memcheck:Uninitialized - fun:_ZN2cc9Scheduler27SetupNextBeginFrameIfNeededEv - fun:_ZN2cc9Scheduler23ProcessScheduledActionsEv -} -{ - bug_252209 - Memcheck:Leak - fun:_Znw* - fun:_ZN7content18ResourceDispatcher12CreateBridgeERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE - fun:_ZN7content11ChildThread12CreateBridgeERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE - fun:_ZN7content25WebKitPlatformSupportImpl20CreateResourceLoaderERKN11webkit_glue20ResourceLoaderBridge11RequestInfoE - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context5StartERKN5blink13WebURLRequestEPNS_20ResourceLoaderBridge16SyncLoadResponseEPNS_25WebKitPlatformSupportImplE - fun:_ZN11webkit_glue16WebURLLoaderImpl18loadAsynchronouslyERKN5blink13WebURLRequestEPNS1_18WebURLLoaderClientE - fun:_ZN7WebCore22ResourceHandleInternal5startENS_17StoredCredentialsE - fun:_ZN7WebCore14ResourceHandle5startENS_17StoredCredentialsE - fun:_ZN7WebCore14ResourceHandle6createERKNS_15ResourceRequestEPNS_20ResourceHandleClientEbbNS_17StoredCredentialsE -} -{ - bug_252228 - Memcheck:Leak - fun:_Znw* - fun:_ZN12_GLOBAL__N_125WorkerGlobalScopeObserver6createEPN7WebCore17WorkerGlobalScopeEN3WTF10PassRefPtrIN5blink31WorkerAllowMainThreadBridgeBaseEEE - fun:_ZN5blink31WorkerAllowMainThreadBridgeBaseC1EPN7WebCore17WorkerGlobalScopeEPNS_13WebWorkerBaseE - fun:*Allow*MainThreadBridge* -} -{ - bug_252241_a - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN7content20WebKitTestController20PrepareForLayoutTestERK4GURLRKN4base8FilePathEbRKSs - fun:_Z16ShellBrowserMainRKN7content18MainFunctionParams* - fun:_ZN7content17ShellMainDelegate10RunProcessERKSsRKNS_18MainFunctionParamsE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE -} -{ - bug_252241_b - Memcheck:Leak - fun:_Znw* - fun:_ZN7content19ContentMainDelegate26CreateContentUtilityClientEv - fun:_ZN7content24ContentClientInitializer3SetERKSsPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl10InitializeEiPPKcPNS_19ContentMainDelegateE - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE -} -{ - bug_252641_a - Memcheck:Uninitialized - fun:pthread_rwlock_init$UNIX2003 - fun:_ZN3re25MutexC2Ev - fun:_ZN3re25MutexC1Ev - ... - fun:_ZN11leveldb_env19ParseMethodAndErrorEPKcPNS_8MethodIDEPi -} -{ - bug_253797 - Memcheck:Uninitialized - fun:_ZNSt11char_traitsIcE6lengthEPKc - fun:_ZN4base8internal17StringPieceDetail* - fun:_ZN4base16BasicStringPieceISsEC1EPKc - fun:_ZN8autofill22AutofillQueryXmlParser13CharacterDataEPN4buzz15XmlParseContextEPKci - fun:_ZN4buzz9XmlParser18ExpatCharacterDataEPKci - fun:_ZN4buzzL21CharacterDataCallbackEPvPKci - obj:*libexpat.so* - obj:*libexpat.so* - obj:*libexpat.so* - obj:*libexpat.so* - fun:XML_ParseBuffer - fun:_ZN4buzz9XmlParser5ParseEPKcmb - fun:_ZN8autofill12_GLOBAL__N_126AutofillQueryXmlParserTest13ParseQueryXMLERKSsb - fun:_ZN8autofill12_GLOBAL__N_149AutofillQueryXmlParserTest_ParseAutofillFlow_Test8TestBodyEv -} -{ - bug_255718 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base4BindIMNS_12_GLOBAL__N_121PostTaskAndReplyRelayEFvvENS_8internal17UnretainedWrapperIS2_EEEENS_8CallbackINS5_9BindStateINS5_13FunctorTraitsIT_E12RunnableTypeENSC_7RunTypeEFvNS5_19CallbackParamTraitsIT0_E11StorageTypeEEE14UnboundRunTypeEEESB_RKSG_ - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN4base26PostTaskAndReplyWithResultIN5quota15QuotaStatusCodeES2_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNS9_IFvT0_EEE - fun:_ZN7fileapi21FileSystemQuotaClient16DeleteOriginDataERK4GURLN5quota11StorageTypeERKN4base8CallbackIFvNS4_15QuotaStatusCodeEEEE - fun:_ZN5quota12QuotaManager17OriginDataDeleter3RunEv - fun:_ZN5quota9QuotaTask5StartEv - fun:_ZN5quota12QuotaManager16DeleteOriginDataERK4GURLNS_11StorageTypeEiRKN4base8CallbackIFvNS_15QuotaStatusCodeEEEE - fun:_ZN7content12_GLOBAL__N_134ClearQuotaManagedOriginsOnIOThreadERK13scoped_refptrIN5quota12QuotaManagerEERKSt3setI4GURLSt4lessIS8_ESaIS8_EENS2_11StorageTypeE - fun:_ZN7content12_GLOBAL__N_121ClearOriginOnIOThreadEjRK4GURLRK13scoped_refptrIN3net23URLRequestContextGetterEERKS4_IN5quota12QuotaManagerEE -} -{ - bug_258466 - Memcheck:Leak - fun:_Znw* - fun:_ZN22ChromeBrowserMainParts25PreMainMessageLoopRunImplEv - fun:_ZN22ChromeBrowserMainParts21PreMainMessageLoopRunEv - fun:_ZN7content15BrowserMainLoop13CreateThreadsEv - fun:_ZN7content21BrowserMainRunnerImpl10InitializeERKNS_18MainFunctionParamsE - fun:_ZN7content11BrowserMainERKNS_18MainFunctionParamsE - fun:_ZN7content23RunNamedProcessTypeMainERKSsRKNS_18MainFunctionParamsEPNS_19ContentMainDelegateE - fun:_ZN7content21ContentMainRunnerImpl3RunEv - fun:_ZN7content11ContentMainEiPPKcPNS_19ContentMainDelegateE - fun:ChromeMain -} -{ - bug_258132a - Memcheck:Leak - fun:_Znw* - fun:_ZN5ppapi5proxy15PPP_Class_Proxy19CreateProxiedObjectEPK18PPB_Var_DeprecatedPNS0_10DispatcherEill - fun:_ZN5ppapi5proxy24PPB_Var_Deprecated_Proxy27OnMsgCreateObjectDeprecatedEillNS0_24SerializedVarReturnValueE -} -{ - bug_258132b - Memcheck:Leak - fun:_Znw* - fun:_ZN5ppapi5proxy26PluginProxyMultiThreadTest7RunTestEv - fun:_ZN5ppapi*ThreadAwareCallback*Test_* -} -{ - bug_259188 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore16V8PerIsolateData6createEPN2v87IsolateE - fun:_ZN7WebCore16V8PerIsolateData17ensureInitializedEPN2v87IsolateE - fun:_ZN5blink10initializeEPNS_8PlatformE -} -{ - bug_259303 - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC7Message23EnsureFileDescriptorSetEv - fun:_ZN3IPC7Message19file_descriptor_setEv - fun:_ZN3IPC7Channel11ChannelImpl24WillDispatchInputMessageEPNS_7MessageE - fun:_ZN3IPC8internal13ChannelReader17DispatchInputDataEPKci - fun:_ZN3IPC8internal13ChannelReader23ProcessIncomingMessagesEv - fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi - fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_ - fun:_ZN4base19MessagePumpLibevent22OnLibeventNotificationEisPv -} -{ - bug_259357d - Memcheck:Uninitialized - ... - fun:_ZN3gpu5gles239ShaderTranslatorTest_OptionsString_Test8TestBodyEv -} -{ - bug_259357f - Memcheck:Uninitialized - fun:_ZNK3gpu12AsyncAPIMock6IsArgsclEPKv - fun:_ZNK7testing8internal12TrulyMatcherIN3gpu12AsyncAPIMock6IsArgsEE15MatchAndExplainIPKvEEbRT_PNS_19MatchResultListenerE - fun:_ZNK7testing18PolymorphicMatcherINS_8internal12TrulyMatcherIN3gpu12AsyncAPIMock6IsArgsEEEE15MonomorphicImplIPKvE15MatchAndExplainESA_PNS_19MatchResultListenerE - fun:_ZNK7testing8internal11MatcherBaseIPKvE15MatchAndExplainES3_PNS_19MatchResultListenerE - fun:_ZNK7testing8internal11MatcherBaseIPKvE7MatchesES3_ - fun:_ZN7testing8internal11TuplePrefixILm3EE7MatchesINSt3tr15tupleIINS_7MatcherIjEES7_NS6_IPKvEEEEENS5_IIjjS9_EEEEEbRKT_RKT0_ - fun:_ZN7testing8internal12TupleMatchesINSt3tr15tupleIINS_7MatcherIjEES5_NS4_IPKvEEEEENS3_IIjjS7_EEEEEbRKT_RKT0_ - fun:_ZNK7testing8internal16TypedExpectationIFN3gpu5error5ErrorEjjPKvEE7MatchesERKNSt3tr15tupleIIjjS6_EEE - fun:_ZNK7testing8internal16TypedExpectationIFN3gpu5error5ErrorEjjPKvEE21ShouldHandleArgumentsERKNSt3tr15tupleIIjjS6_EEE - fun:_ZNK7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE29FindMatchingExpectationLockedERKNSt3tr15tupleIIjjS6_EEE - fun:_ZN7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE30UntypedFindMatchingExpectationES6_PS6_PbPSoSB_ - fun:_ZN7testing8internal25UntypedFunctionMockerBase17UntypedInvokeWithEPKv - fun:_ZN7testing8internal18FunctionMockerBaseIFN3gpu5error5ErrorEjjPKvEE10InvokeWithERKNSt3tr15tupleIIjjS6_EEE - fun:_ZN7testing8internal14FunctionMockerIFN3gpu5error5ErrorEjjPKvEE6InvokeEjjS6_ - fun:_ZN3gpu12AsyncAPIMock9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv - fun:_ZN3gpu12GpuScheduler10PutChangedEv -} -{ - bug_259789 - Memcheck:Uninitialized - fun:_ZN7WebCore12_GLOBAL__N_116adjustAttributesERKNS_17GraphicsContext3D10AttributesEPNS_8SettingsE - fun:_ZN7WebCore21WebGLRenderingContext19maybeRestoreContextEPNS_5TimerIS0_EE - fun:_ZN7WebCore5TimerINS_21WebGLRenderingContextEE5firedEv - fun:_ZN7WebCore12ThreadTimers24sharedTimerFiredInternalEv - fun:_ZN7WebCore12ThreadTimers16sharedTimerFiredEv - fun:_ZN11webkit_glue25WebKitPlatformSupportImpl9DoTimeoutEv -} -{ - bug_259789b - Memcheck:Uninitialized - fun:_ZN7WebCore12_GLOBAL__N_116adjustAttributesERKNS_17GraphicsContext3D10AttributesEPNS_8SettingsE - fun:_ZN7WebCore21WebGLRenderingContext6createEPNS_17HTMLCanvasElementEPNS_22WebGLContextAttributesE - fun:_ZN7WebCore17HTMLCanvasElement10getContextERKN3WTF6StringEPNS_23CanvasContextAttributesE -} -{ - bug_259799 - Memcheck:Leak - fun:_Znw* - fun:_ZN5blink16EditorClientImpl23requestCheckingOfStringEN3WTF10PassRefPtrIN7WebCore19TextCheckingRequestEEE - fun:_ZN7WebCore12SpellChecker13invokeRequestEN3WTF10PassRefPtrINS_17SpellCheckRequestEEE - fun:_ZN7WebCore12SpellChecker18requestCheckingForEN3WTF10PassRefPtrINS_17SpellCheckRequestEEE - fun:_ZN7WebCore6Editor40markAllMisspellingsAndBadGrammarInRangesEjPNS_5RangeES2_ - fun:_ZN7WebCore6Editor33markMisspellingsAfterTypingToWordERKNS_15VisiblePositionERKNS_16VisibleSelectionE - fun:_ZN7WebCore13TypingCommand27markMisspellingsAfterTypingENS0_14ETypingCommandE - fun:_ZN7WebCore13TypingCommand24typingAddedToOpenCommandENS0_14ETypingCommandE - fun:_ZN7WebCore13TypingCommand28insertTextRunWithoutNewlinesERKN3WTF6StringEb - fun:_ZNK7WebCore26TypingCommandLineOperationclEmmb -} -{ - bug_262875 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN3sql10Connection18GetCachedStatementERKNS_11StatementIDEPKc - ... - fun:_ZN15webkit_database15DatabaseTracker23UpgradeToCurrentVersionEv - fun:_ZN15webkit_database15DatabaseTracker8LazyInitEv - fun:_ZN15webkit_database15DatabaseTracker23GetAllOriginIdentifiersEPSt6vectorISsSaISsEE - fun:_ZN15webkit_database12_GLOBAL__N_120GetOriginsOnDBThreadEPNS_15DatabaseTrackerEPSt3setI4GURLSt4lessIS4_ESaIS4_EE -} -{ - bug_262934 - Memcheck:Leak - fun:_Znw* - fun:_ZN7GrGpuGL12ProgramCache10getProgramERK15GrGLProgramDescPPK13GrEffectStageS7_ - fun:_ZN7GrGpuGL18flushGraphicsStateEN5GrGpu8DrawTypeEPK20GrDeviceCoordTexture - fun:_ZN5GrGpu22setupClipAndFlushStateENS_8DrawTypeEPK20GrDeviceCoordTexturePN11GrDrawState18AutoRestoreEffectsE - fun:_ZN5GrGpu6onDrawERKN12GrDrawTarget8DrawInfoE - ... - fun:_ZN9GrContext22readRenderTargetPixelsEP14GrRenderTargetiiii13GrPixelConfigPvmj -} -{ - bug_268258 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF10StringImpl12createStaticEPKcjj - fun:_ZN7WebCore*Names*init* -} -{ - bug_268267 - Memcheck:Leak - fun:_Znw* - fun:_ZNK4base8internal18WeakReferenceOwner6GetRefEv - fun:_ZN4base14WeakPtrFactoryINS_12_GLOBAL__N_16TargetEE10GetWeakPtrEv - fun:_ZN4base45WeakPtrTest_MoveOwnershipAfterInvalidate_Test8TestBodyEv -} -{ - bug_269201 - Memcheck:Unaddressable - ... - fun:_ZN4base8internal17IncomingTaskQueue18AddToIncomingQueueERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaEb - fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEE - fun:_ZN8printing8PrintJob21UpdatePrintedDocumentEPNS_15PrintedDocumentE - fun:_ZN8printing8PrintJob4StopEv -} -{ - bug_269844 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorIPN4base11PendingTaskEE8allocateEmPKv - fun:_ZNSt11_Deque_baseIN4base11PendingTaskESaIS1_EE15_M_allocate_mapEm - fun:_ZNSt5dequeIN4base11PendingTaskESaIS1_EE17_M_reallocate_mapEmb - ... - fun:_ZN4base8internal17IncomingTaskQueue15PostPendingTaskEPNS_11PendingTaskE - fun:_ZN4base8internal17IncomingTaskQueue18AddToIncomingQueueERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEENS_9TimeDeltaEb - fun:_ZN4base11MessageLoop8PostTaskERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEE -} -{ - bug_272596 - Memcheck:Leak - ... - fun:nssPKIObjectCollection_AddInstanceAsObject - fun:nssToken_TraverseCertificates - fun:NSSTrustDomain_TraverseCertificates - fun:PK11_ListCerts - fun:_ZN3net15NSSCertDatabase9ListCertsEPSt6vectorI13scoped_refptrINS_15X509CertificateEESaIS4_EE - fun:_ZN8chromeos12_GLOBAL__N_119LoadNSSCertificatesEPSt6vectorI13scoped_refptrIN3net15X509CertificateEESaIS5_EE -} -{ - bug_273398 - Memcheck:Leak - ... - fun:_ZN6Pickle6ResizeEm - fun:_ZN6PickleC1Ev - fun:_ZN7content14ZygoteHostImpl20GetTerminationStatusEibPi - fun:_ZN7content20ChildProcessLauncher25GetChildTerminationStatusEbPi -} -{ - bug_274193 - Memcheck:Leak - ... - fun:_mesa_glsl_compile_shader - fun:compile_shader - fun:_mesa_CompileShaderARB - fun:shared_dispatch_stub_529 - fun:_ZN3gfx9GLApiBase17glCompileShaderFnEj - fun:_ZN3gpu5gles214ProgramManager15DoCompileShaderEPNS0_6ShaderEPNS0_16ShaderTranslatorEPNS0_11FeatureInfoE - fun:_ZN3gpu5gles216GLES2DecoderImpl15DoCompileShaderEj - fun:_ZN3gpu5gles216GLES2DecoderImpl19HandleCompileShaderEjRKNS0_4cmds13CompileShaderE - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv -} -{ - bug_288787 - Memcheck:Leak - fun:_Znw* - fun:_ZN10extensions22ManagedValueStoreCache16ExtensionTracker7ObserveEiRKN7content18NotificationSourceERKNS2_19NotificationDetailsE - fun:_ZN7content23NotificationServiceImpl6NotifyEiRKNS_18NotificationSourceERKNS_19NotificationDetailsE - fun:_ZN16ExtensionService23NotifyExtensionUnloadedEPKN10extensions9ExtensionEN14extension_misc23UnloadedExtensionReasonE - fun:_ZN16ExtensionService16DisableExtensionERKSsN10extensions9Extension13DisableReasonE - fun:_ZN22theme_service_internal40ThemeServiceTest_DisableUnusedTheme_Test8TestBodyEv -} -{ - bug_288804 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3net12HostPortPairESt3mapINS3_15SpdySettingsIdsES2_INS3_17SpdySettingsFlagsEjESt4lessIS7_ESaIS2_IKS7_S9_EEEEEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE14_M_create_nodeERKSE_ - fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeISE_E - fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EE7_M_copyEPKSt13_Rb_tree_nodeISE_EPSL_ - fun:_ZNSt8_Rb_treeIN3net12HostPortPairESt4pairIKS1_St3mapINS0_15SpdySettingsIdsES2_INS0_17SpdySettingsFlagsEjESt4lessIS5_ESaIS2_IKS5_S7_EEEESt10_Select1stISE_ES8_IS1_ESaISE_EEaSERKSJ_ - fun:_ZNSt3mapIN3net12HostPortPairES_INS0_15SpdySettingsIdsESt4pairINS0_17SpdySettingsFlagsEjESt4lessIS2_ESaIS3_IKS2_S5_EEES6_IS1_ESaIS3_IKS1_SB_EEEaSERKSG_ - fun:_ZN18chrome_browser_net27HttpServerPropertiesManager24UpdatePrefsFromCacheOnIOERKN4base8CallbackIFvvEEE - fun:_ZN18chrome_browser_net27HttpServerPropertiesManager24UpdatePrefsFromCacheOnIOEv -} -{ - bug_290364 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base13WaitableEventC1Ebb - fun:_ZN4base12_GLOBAL__N_112ThreadParamsC1Ev - fun:_ZN4base12_GLOBAL__N_112CreateThreadEmbPNS_14PlatformThread8DelegateEPNS_20PlatformThreadHandleENS_14ThreadPriorityE - fun:_ZN4base14PlatformThread6CreateEmPNS0_8DelegateEPNS_20PlatformThreadHandleE - fun:_ZN4base12SimpleThread5StartEv - fun:_ZN4base19SequencedWorkerPool6WorkerC1ERK13scoped_refptrIS0_EiRKSs - fun:_ZN4base19SequencedWorkerPool5Inner30FinishStartingAdditionalThreadEi - fun:_ZN4base19SequencedWorkerPool5Inner10ThreadLoopEPNS0_6WorkerE - fun:_ZN4base19SequencedWorkerPool6Worker3RunEv - fun:_ZN4base12SimpleThread10ThreadMainEv - fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv -} -{ - bug_290405 - Memcheck:Uninitialized - fun:_ZNK16GrGradientEffect9onIsEqualERK8GrEffect - fun:_ZNK8GrEffect7isEqualERKS_ - fun:_ZNK13GrEffectStage13DeferredStage7isEqualERKS_b - fun:_ZNK11GrDrawState13DeferredState7isEqualERKS_ - fun:_ZNK19GrInOrderDrawBuffer13needsNewStateEv - fun:_ZN19GrInOrderDrawBuffer6onDrawERKN12GrDrawTarget8DrawInfoE - fun:_ZN12GrDrawTarget20drawIndexedInstancesE15GrPrimitiveTypeiiiPK6SkRect - fun:_ZN13GrTextContext11flushGlyphsEv -} -{ - bug_290407 - Memcheck:Leak - fun:calloc - fun:_swrast_new_soft_renderbuffer - fun:_mesa_BindRenderbufferEXT - fun:shared_dispatch_stub_939 - fun:_ZN3gfx9GLApiBase23glBindRenderbufferEXTFnEjj - fun:_ZN3gpu5gles216GLES2DecoderImpl18DoBindRenderbufferEjj - fun:_ZN3gpu5gles216GLES2DecoderImpl22HandleBindRenderbufferEjRKNS0_4cmds16BindRenderbufferE - fun:_ZN3gpu5gles216GLES2DecoderImpl9DoCommandEjjPKv - fun:_ZN3gpu13CommandParser14ProcessCommandEv -} -{ - bug_290435 - Memcheck:Uninitialized - fun:_ZN7WebCore12AudioContext20scheduleNodeDeletionEv - fun:_ZN7WebCore12AudioContext21handlePostRenderTasksEv - fun:_ZN7WebCore20AudioDestinationNode6renderEPNS_8AudioBusES2_m - fun:_ZN7WebCore27OfflineAudioDestinationNode13offlineRenderEv -} -{ - bug_290440 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE - fun:_ZN7WebCore32scriptStateFromWorkerGlobalScopeEPNS_17WorkerGlobalScopeE - ... - fun:_ZN7WebCore13WorkerRunLoop9runInModeEPNS_17WorkerGlobalScopeERKNS_13ModePredicateENS0_8WaitModeE - fun:_ZN7WebCore13WorkerRunLoop3runEPNS_17WorkerGlobalScopeE - fun:_ZN7WebCore12WorkerThread12runEventLoopEv -} -{ - bug_290443 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE - fun:_ZN7WebCore11ScriptState7currentEv - fun:_ZN7WebCore20ImageBitmapFactories17ImageBitmapLoaderC1EPS0_N3WTF10PassRefPtrINS_21ScriptPromiseResolverEEERKNS_7IntRectE - fun:_ZN7WebCore20ImageBitmapFactories17ImageBitmapLoader6createEPS0_N3WTF10PassRefPtrINS_21ScriptPromiseResolverEEERKNS_7IntRectE - fun:_ZN7WebCore20ImageBitmapFactories17createImageBitmapEPNS_11EventTargetEPNS_4BlobERNS_14ExceptionStateE - fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL24createImageBitmap1MethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL23createImageBitmapMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore27WorkerGlobalScopeV8InternalL31createImageBitmapMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE -} -{ - bug_290451 - Memcheck:Uninitialized - fun:_ZN4base17MD5DigestToBase16ERKNS_9MD5DigestE - fun:_ZN7content16WebKitTestRunner11CaptureDumpEv - fun:_ZN7content16WebKitTestRunner12testFinishedEv - fun:_ZN13WebTestRunner10TestRunner18completeNotifyDoneEv - fun:_ZN13WebTestRunner10TestRunner10notifyDoneERKSt6vectorINS_10CppVariantESaIS2_EEPS2_ - fun:_ZN13WebTestRunner13CppBoundClass14MemberCallbackINS_10TestRunnerEE3runERKSt6vectorINS_10CppVariantESaIS5_EEPS5_ - fun:_ZN13WebTestRunner13CppBoundClass6invokeEPvPK10_NPVariantmPS2_ - fun:_ZN13WebTestRunner11CppNPObject6invokeEP8NPObjectPvPK10_NPVariantjPS4_ -} -{ - bug_290559a - Memcheck:Leak - fun:_Znw* - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateEN5blink22WebFileSystemCallbacksE - ... - fun:_ZN2v88internal25FunctionCallbackArguments4Call* -} -{ - bug_290559b - Memcheck:Leak - fun:_Znw* - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateEN5blink22WebFileSystemCallbacksE - ... - fun:_ZN7WebCore*SyncV8Internal*FunctionCallbackInfo* -} -{ - bug_293024_b - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF24ThreadSafeRefCountedBasenwEm - fun:_ZN5blink12_GLOBAL__N_131AllowFileSystemMainThreadBridge6createEPN7WebCore17WorkerGlobalScopeEPNS_13WebWorkerBaseERKN3WTF6StringE - fun:_ZN5blink22WorkerFileSystemClient15allowFileSystem* - ... - fun:_ZN2v88internal25FunctionCallbackArguments4CallEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEE -} -{ - bug_293033 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore11ScriptState10forContextEN2v86HandleINS1_7ContextEEE - ... - fun:_ZN7WebCore*V8InternalL*MethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore*V8InternalL*MethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE -} -{ - bug_293049 - Memcheck:Uninitialized - fun:_ZNK7WebCore8Document24webkitPointerLockElementEv - fun:_ZN7WebCore18DocumentV8InternalL39webkitPointerLockElementAttributeGetterEN2v85LocalINS1_6StringEEERKNS1_20PropertyCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore18DocumentV8InternalL47webkitPointerLockElementAttributeGetterCallbackEN2v85LocalINS1_6StringEEERKNS1_20PropertyCallbackInfoINS1_5ValueEEE - fun:_ZN2v88internal25PropertyCallbackArguments4CallEPFvNS_5LocalINS_6StringEEERKNS_20PropertyCallbackInfoINS_5ValueEEEES4_ -} -{ - bug_293058_a - Memcheck:Leak - fun:_Znw* - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateERKN5blink22WebFileSystemCallbacksE - fun:_ZN7content17WebFileSystemImpl* -} -{ - bug_293058_b - Memcheck:Leak - fun:_Znw* - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResultsC1Ev - fun:_ZN7content12_GLOBAL__N_123WaitableCallbackResults11MaybeCreateERKN5blink22WebFileSystemCallbacksE - fun:_ZN7content17WebFileSystemImpl16createFileWriterERKN5blink6WebURLEPNS1_19WebFileWriterClientENS1_22WebFileSystemCallbacksE - fun:_ZN7WebCore17DOMFileSystemSync12createWriterEPKNS_13FileEntrySyncERNS_14ExceptionStateE - fun:_ZN7WebCore13FileEntrySync12createWriterERNS_14ExceptionStateE -} -{ - bug_293088 - Memcheck:Unaddressable - fun:_ZNK3WTF6RefPtrIN7WebCore19TextResourceDecoderEE3getEv - fun:_ZNK7WebCore8Document7decoderEv - fun:_ZN7WebCore25DecodedDataDocumentParser5flushEv - fun:_ZN7WebCore14DocumentWriter3endEv - fun:_ZN7WebCore14DocumentLoader10endWritingEPNS_14DocumentWriterE - fun:_ZN7WebCore14DocumentLoader15finishedLoadingEd - fun:_ZN7WebCore14DocumentLoader14notifyFinishedEPNS_8ResourceE - fun:_ZN7WebCore8Resource11checkNotifyEv - fun:_ZN7WebCore8Resource13finishOnePartEv - fun:_ZN7WebCore8Resource6finishEd - fun:_ZN7WebCore14ResourceLoader16didFinishLoadingEPN5blink12WebURLLoaderEd - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnCompletedRequestEibRKSsRKN4base9TimeTicksE - fun:_ZN7content18ResourceDispatcher17OnRequestCompleteEiibRKSsRKN4base9TimeTicksE -} -{ - bug_298143 - Memcheck:Uninitialized - ... - fun:_ZN7WebCore25TypeConversionsV8Internal*AttributeGetterE* -} -{ - bug_298887 - Memcheck:Leak - ... - fun:_ZN2ui25KeyboardCodeFromXKeyEventEP7_XEvent - fun:_ZN2ui22KeyboardCodeFromNativeERKP7_XEvent - fun:_ZN12_GLOBAL__N_121XModifierStateWatcher20UpdateStateFromEventERKP7_XEvent - fun:_ZN2ui20EventFlagsFromNativeERKP7_XEvent - fun:_ZN2ui8KeyEventC1ERKP7_XEventb - fun:_ZN8chromeos31KeyboardDrivenEventRewriterTest25GetRewrittenEventAsStringEN2ui12KeyboardCodeEiNS1_9EventTypeEhj - fun:_ZN8chromeos48KeyboardDrivenEventRewriterTest_PassThrough_Test8TestBodyEv -} -{ - bug_299647 - Memcheck:Unaddressable - fun:_ZNK3WTF6OwnPtrIN7WebCore19AnimationControllerEE3getEv - fun:_ZNK7WebCore5Frame9animationEv - fun:_ZNK7WebCore12RenderObject9animationEv - fun:_ZN7WebCore12RenderObject15willBeDestroyedEv - fun:_ZN7WebCore22RenderLayerModelObject15willBeDestroyedEv - fun:_ZN7WebCore20RenderBoxModelObject15willBeDestroyedEv - fun:_ZN7WebCore9RenderBox15willBeDestroyedEv - fun:_ZN7WebCore11RenderBlock15willBeDestroyedEv - fun:_ZN7WebCore16RenderFullScreen15willBeDestroyedEv - fun:_ZN7WebCore12RenderObject7destroyEv - fun:_ZN7WebCore22FullscreenElementStack21setFullScreenRendererEPNS_16RenderFullScreenE - fun:_ZN7WebCore22FullscreenElementStack19documentWasDetachedEv - fun:_ZN7WebCore25DocumentLifecycleNotifier25notifyDocumentWasDetachedEv - fun:_ZN7WebCore8Document6detachERKNS_4Node13AttachContextE - fun:_ZN7WebCore8Document21prepareForDestructionEv - fun:_ZN7WebCore5Frame7setViewEN3WTF10PassRefPtrINS_9FrameViewEEE - fun:_ZN7WebCore5Frame10createViewERKNS_7IntSizeERKNS_5ColorEbS3_bNS_13ScrollbarModeEbS7_b - fun:_ZN5blink12WebFrameImpl15createFrameViewEv - fun:_ZN5blink21FrameLoaderClientImpl31transitionToCommittedForNewPageEv - fun:_ZN7WebCore11FrameLoader21commitProvisionalLoadEv - fun:_ZN7WebCore14DocumentLoader13commitIfReadyEv - fun:_ZN7WebCore14DocumentLoader15finishedLoadingEd -} -{ - bug_299804 - Memcheck:Uninitialized - fun:_ZN24GrConfigConversionEffect30TestForPreservingPMConversionsEP9GrContextPNS_12PMConversionES3_ - fun:_ZN12_GLOBAL__N_119test_pm_conversionsEP9GrContextPiS2_ - fun:_ZN9GrContext19createPMToUPMEffectEP9GrTexturebRK8SkMatrix - fun:_ZN9GrContext22readRenderTargetPixelsEP14GrRenderTargetiiii13GrPixelConfigPvmj - fun:_ZN11SkGpuDevice12onReadPixelsERK8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E - fun:_ZN14DeferredDevice12onReadPixelsERK8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E - fun:_ZN7WebCore15GraphicsContext10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN7WebCore12getImageDataILNS_8MultiplyE1EEEN3WTF10PassRefPtrINS2_17Uint8ClampedArrayEEERKNS_7IntRectEPNS_15GraphicsContextERKNS_7IntSizeE - fun:_ZNK7WebCore11ImageBuffer24getUnmultipliedImageDataERKNS_7IntRectENS0_16CoordinateSystemE - fun:_ZNK7WebCore24CanvasRenderingContext2D12getImageDataENS_11ImageBuffer16CoordinateSystemEffffRNS_14ExceptionStateE - fun:_ZNK7WebCore24CanvasRenderingContext2D12getImageDataEffffRNS_14ExceptionStateE - fun:_ZN7WebCore34CanvasRenderingContext2DV8InternalL18getImageDataMethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN7WebCore34CanvasRenderingContext2DV8InternalL26getImageDataMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE - fun:_ZN2v88internal25FunctionCallbackArguments4CallEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEE - fun:_ZN2v88internalL19HandleApiCallHelperILb0EEEPNS0_11MaybeObjectENS0_12_GLOBAL__N_116BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEEPNS0_7IsolateE -} -{ - bug_301900 - Memcheck:Unaddressable - fun:_Z7GrCrashPKc - fun:_ZN19GrInOrderDrawBuffer6onDrawERKN12GrDrawTarget8DrawInfoE - fun:_ZN12GrDrawTarget20drawIndexedInstancesE15GrPrimitiveTypeiiiPK6SkRect - fun:_ZN19GrInOrderDrawBuffer10onDrawRectERK6SkRectPK8SkMatrixPS1_S5_ - fun:_ZN12GrDrawTarget8drawRectERK6SkRectPK8SkMatrixPS1_S5_ - ... - fun:_ZN13SkGPipeReader8playbackEPKvmjPm - fun:_ZN22DeferredPipeController8playbackEb - fun:_ZN14DeferredDevice20flushPendingCommandsE12PlaybackMode - fun:_ZN14DeferredDevice14onAccessBitmapEv - fun:_ZN12SkBaseDevice12accessBitmapEb - fun:_ZN12SkBaseDevice10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E - fun:_ZN8SkCanvas10readPixelsEP8SkBitmapiiNS_10Config8888E - fun:_ZN7WebCore15GraphicsContext10readPixelsEP8SkBitmapiiN8SkCanvas10Config8888E -} -{ - bug_309468 - Memcheck:Leak - fun:_Znw* - fun:_ZN19TranslateBubbleView25CreateViewBeforeTranslateEv - fun:_ZN19TranslateBubbleView4InitEv - fun:_ZN5views18BubbleDelegateView12CreateBubbleEPS0_ - fun:_ZN23TranslateBubbleViewTest5SetUpEv -} -{ - bug_309477 - Memcheck:Uninitialized - fun:_ZN13WebTestRunner11EventSender5resetEv - fun:_ZN13WebTestRunner14TestInterfaces26resetTestHelperControllersEv - fun:_ZN13WebTestRunner14TestInterfaces8resetAllEv - ... - fun:_ZN7content26ShellRenderProcessObserver17WebKitInitializedEv - fun:_ZN7content16RenderThreadImpl23EnsureWebKitInitializedEv - fun:_ZN7content16RenderThreadImpl15OnCreateNewViewERK18ViewMsg_New_Params -} -{ - bug_310351 - Memcheck:Leak - ... - fun:_ZN3WTF12PthreadStatenwEm - fun:_ZN3WTFL35establishIdentifierForPthreadHandleERK* - fun:_ZN3WTF13currentThreadEv - fun:_ZN3WTF20initializeMainThreadEPFvPFvPvES0_E -} -{ - bug_312332 - Memcheck:Uninitialized - ... - fun:_ZNK7WebCore17RenderTextControl29computeIntrinsicLogicalWidthsERNS_10LayoutUnitES2_ - fun:_ZN7WebCore17RenderTextControl29computePreferredLogicalWidthsEv - ... - fun:_ZN7WebCore11RenderBlock6layoutEv -} -{ - bug_317166 - Memcheck:Leak - fun:malloc - fun:_dl_close_worker - fun:_dl_close - fun:_dl_catch_error - fun:_dlerror_run - fun:dlclose - obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0 - fun:snd_config_searcha_hooks - fun:snd_config_searchva_hooks - obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0 - fun:snd_config_search_definition - obj:/usr/lib/x86_64-linux-gnu/libasound.so.2.0.0 - fun:_ZN5media11AlsaWrapper7PcmOpenEPP8_snd_pcmPKc15_snd_pcm_streami - fun:_ZN9alsa_utilL10OpenDeviceEPN5media11AlsaWrapperEPKc15_snd_pcm_streamii15_snd_pcm_formati - fun:_ZN9alsa_util18OpenPlaybackDeviceEPN5media11AlsaWrapperEPKcii15_snd_pcm_formati - fun:_ZN5media19AlsaPcmOutputStream16AutoSelectDeviceEj - fun:_ZN5media19AlsaPcmOutputStream4OpenEv - fun:_ZN5media25AudioOutputDispatcherImpl19CreateAndOpenStreamEv - fun:_ZN5media25AudioOutputDispatcherImpl10OpenStreamEv - fun:_ZN5media20AudioOutputResampler10OpenStreamEv - fun:_ZN5media16AudioOutputProxy4OpenEv - fun:_ZN5media18AudioStreamHandler20AudioStreamContainer4PlayEv -} -{ - bug_321976 - Memcheck:Leak - ... - fun:nssList_Create - fun:nssTrustDomain_UpdateCachedTokenCerts - fun:nssSlot_Refresh - fun:nssSlot_IsTokenPresent - fun:pk11_IsPresentCertLoad - fun:SECMOD_OpenNewSlot - fun:_ZN6crypto12_GLOBAL__N_116NSSInitSingleton10OpenUserDBERKN4base8FilePathEPKc - fun:_ZN6crypto12_GLOBAL__N_116NSSInitSingleton13OpenTestNSSDBEv - fun:_ZN6crypto15ScopedTestNSSDBC1Ev -} -{ - bug_327672 - Memcheck:Uninitialized - fun:_ZNK7WebCore18StyleSheetContents11isCacheableEv - fun:_ZN7WebCore9LinkStyle16setCSSStyleSheetERKN3WTF6StringERKNS_4KURLES4_PKNS_21CSSStyleSheetResourceE - fun:_ZN7WebCore21CSSStyleSheetResource11checkNotifyEv - ... - fun:_ZN11webkit_glue16WebURLLoaderImpl7Context18OnCompletedRequestEibRKSsRKN4base9TimeTicksE -} -{ - bug_328987 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base8internal20PostTaskAndReplyImpl16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEESA_ - fun:_ZN4base10TaskRunner16PostTaskAndReplyERKN15tracked_objects8LocationERKNS_8CallbackIFvvEEES9_ - fun:_ZN4base26PostTaskAndReplyWithResultIN3net20WifiPHYLayerProtocolES2_EEbPNS_10TaskRunnerERKN15tracked_objects8LocationERKNS_8CallbackIFT_vEEERKNS9_IFvT0_EEE - fun:_ZN22MetricsNetworkObserver25ProbeWifiPHYLayerProtocolEv - fun:_ZN22MetricsNetworkObserverC1Ev - fun:_ZN10MetricsLogC1ERKSsi -} diff --git a/chromium/tools/valgrind/memcheck/suppressions_linux.txt b/chromium/tools/valgrind/memcheck/suppressions_linux.txt deleted file mode 100644 index 6ce46070e6f..00000000000 --- a/chromium/tools/valgrind/memcheck/suppressions_linux.txt +++ /dev/null @@ -1,24 +0,0 @@ -# There are three kinds of suppressions in this file: -# 1. Third party stuff we have no control over. -# -# 2. Intentional unit test errors, stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing. -# -# 3. Suppressions for real chromium bugs that are not yet fixed. -# These should all be in chromium's bug tracking system. -# Periodically we should sweep this file and the bug tracker clean by -# running overnight and removing outdated bugs/suppressions. -# -# TODO(rnk): Should we move all of the Linux-only system library suppressions -# over from suppressions.txt? We'd avoid wasting time parsing and matching -# suppressions on non-Linux, which is basically just Mac. -# -#----------------------------------------------------------------------- - -# 1. Third party stuff we have no control over. - -# 2. Intentional unit test errors, stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing. - -# 3. Suppressions for real chromium bugs that are not yet fixed. - diff --git a/chromium/tools/valgrind/memcheck/suppressions_mac.txt b/chromium/tools/valgrind/memcheck/suppressions_mac.txt deleted file mode 100644 index 59acb66fdae..00000000000 --- a/chromium/tools/valgrind/memcheck/suppressions_mac.txt +++ /dev/null @@ -1,2378 +0,0 @@ -# There are three kinds of suppressions in this file: -# 1. Third party stuff we have no control over. -# -# 2. Intentional unit test errors, stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing. -# -# 3. Suppressions for real chromium bugs that are not yet fixed. -# These should all be in chromium's bug tracking system. -# Periodically we should sweep this file and the bug tracker clean by -# running overnight and removing outdated bugs/suppressions. -#----------------------------------------------------------------------- - -# 1. Third party stuff we have no control over. -{ - FIXME mac kevent libevent probably needs valgrind hooks - Memcheck:Param - kevent(changelist) - fun:kevent - fun:event_base_new -} -{ - # CoreAudio leak. See http://crbug.com/9351 - bug_9351 - Memcheck:Leak - ... - fun:_ZN12HALCADClient19AddPropertyListenerEmPK26AudioObjectPropertyAddressPFlmmS2_PvES3_ - ... - fun:_ZN9HALSystem16CheckOutInstanceEv - ... -} -{ - bug_18215 - Memcheck:Uninitialized - fun:_DPSNextEvent - fun:-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] - fun:-[NSApplication run] -} -{ - # Also filed with Apple as rdar://7255382 - bug_20459b - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:__CFArrayInit - fun:CFArrayCreateMutableCopy - ... - fun:_ZN8Security12KeychainCore5Trust8evaluate* -} -{ - # See also http://openradar.appspot.com/radar?id=1169404 - bug_79533b - Memcheck:Uninitialized - ... - fun:_Z*19cssm_DataAbortQuery17cssm_dl_db_handlel - fun:CSSM_DL_DataAbortQuery - fun:_ZN11SSDLSession14DataAbortQueryEll - fun:_Z*19cssm_DataAbortQuery17cssm_dl_db_handlel - fun:CSSM_DL_DataAbortQuery - fun:tpDbFindIssuerCrl - fun:tpVerifyCertGroupWithCrls -} -{ - # QTKit leak. See http://crbug.com/100772 and rdar://10319535. - bug_100772 - Memcheck:Leak - fun:calloc - fun:QTMLCreateMutex - fun:WarholCreateGlobals - fun:INIT_QuickTimeLibInternal - fun:pthread_once - fun:INIT_QuickTimeLib - fun:EnterMovies_priv - fun:EnterMovies - fun:TundraUnitInputFromTSFileEntry - fun:TundraUnitVDIGInputEntry - fun:TundraUnitCreateFromDescription - fun:+[QTCaptureVDIGDevice _refreshDevices] - fun:+[QTCaptureVDIGDevice devicesWithIOType:] - fun:+[QTCaptureDevice devicesWithIOType:] - fun:+[QTCaptureDevice inputDevices] - fun:+[QTCaptureDevice inputDevicesWithMediaType:] - ... -} -{ - # See http://crbug.com/141293 - bug_141293 - Memcheck:Uninitialized - fun:deflateEnd - fun:deflateSetDictionary - fun:deflate - fun:png_write_finish_row - ... - fun:png_write_find_filter - fun:_cg_png_write_row - fun:writeOnePng - fun:_CGImagePluginWritePNG - fun:CGImageDestinationFinalize - fun:+[NSBitmapImageRep(NSBitmapImageFileTypeExtensions) representationOfImageRepsInArray:usingType:properties:] - fun:-[NSBitmapImageRep(NSBitmapImageFileTypeExtensions) representationUsingType:properties:] - fun:_ZN3gfx8internal24Get1xPNGBytesFromNSImageEP7NSImage -} -# Intentional leaks in AppKit, for an OS-level cache. Only appear on the first -# run of each reboot. -{ - bug_257276 - Memcheck:Leak - fun:malloc_zone_calloc - fun:ripr_Path - fun:ripc_DrawPath - fun:CGContextDrawPath - fun:CGContextStrokePath - fun:-[NSLayoutManager(NSTextViewSupport) _drawLineForGlyphRange:inContext:from:to:at:thickness:lineOrigin:breakForDescenders:flipped:] - fun:-[NSLayoutManager(NSTextViewSupport) _drawLineForGlyphRange:type:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:isStrikethrough:] - fun:-[NSLayoutManager(NSTextViewSupport) drawUnderlineForGlyphRange:underlineType:baselineOffset:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:] - fun:-[NSLayoutManager(NSTextViewSupport) _lineGlyphRange:type:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:isStrikethrough:] - fun:-[NSLayoutManager(NSTextViewSupport) underlineGlyphRange:underlineType:lineFragmentRect:lineFragmentGlyphRange:containerOrigin:] - fun:-[NSLayoutManager(NSPrivate) _drawGlyphsForGlyphRange:atPoint:parameters:] - fun:-[NSLayoutManager(NSTextViewSupport) drawGlyphsForGlyphRange:atPoint:] - fun:-[NSStringDrawingTextStorage drawTextContainer:withRect:graphicsContext:baselineMode:scrollable:padding:] - fun:_NSStringDrawingCore - fun:-[NSString(NSExtendedStringDrawing) drawWithRect:options:attributes:] - fun:-[HyperlinkButtonCell drawTitle:withFrame:inView:] -} -{ - bug_257276_b - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFNumberCreate - fun:get_colorspace - fun:initImagePng - fun:_CGImagePluginInitPNG - fun:makeImagePlus - fun:CGImageSourceCreateImageAtIndex - fun:CGImageCreateWithPNGDataProvider - fun:setCursorFromBundle - fun:CoreCursorSet - fun:-[NSCursor set] -} - -# 2. Intentional unit test errors, stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing. -{ - # Mac Sandbox test cases are registered in a global map. This code is only - # used in the unit test binary. - Mac_Sandbox_Intentional_Leak1 - Memcheck:Leak - fun:_Znw* - fun:_ZN7content8internal19RegisterSandboxTestINS_* - ... - fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextE - fun:_ZN4dyld24initializeMainExecutableEv -} -{ - # __cxa_get_globals leaks a structure when called for the first time - __cxa_get_globals one-time leak - Memcheck:Leak - ... - fun:__cxa_get_globals -} -{ - # Intentional leak of a time-based self-deleting object. - bug_264886 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base26MessagePumpInstrumentation6CreateERKNS_9TimeDeltaES3_ - fun:_ZN4base24MessagePumpCFRunLoopBase21EnableInstrumentationEv - fun:_ZN4base24MessagePumpNSApplicationC2Ev - fun:_ZN4base24MessagePumpCrApplicationC2Ev - fun:_ZN4base24MessagePumpCrApplicationC1Ev - fun:_ZN4base14MessagePumpMac6CreateEv -} - -# 3. Suppressions for real chromium bugs that are not yet fixed. -{ - bug_17297 - Memcheck:Leak - fun:malloc - ... - fun:+[NSColor keyboardFocusIndicatorColor] - fun:+[NSColor colorWithCatalogName:colorName:] - fun:+[NSCatalogColor newWithCoder:zone:] - fun:-[NSColor initWithCoder:] -} -{ - bug_18218 - Memcheck:Leak - fun:malloc - fun:__addHandler2 - fun:__NSFinalizeThreadData - fun:_pthread_tsd_cleanup - fun:_pthread_exit - fun:thread_start -} -{ - bug_20582 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base19MessagePumpLibevent19WatchFileDescriptorEibNS0_4ModeEPNS0_21FileDescriptorWatcherEPNS0_7WatcherE - fun:_ZN4base16MessageLoopForIO19WatchFileDescriptorEibNS_4ModeEPN4base19MessagePumpLibevent21FileDescriptorWatcherEPNS2_7WatcherE - fun:_ZN3IPC7Channel11ChannelImpl23ProcessOutgoingMessagesEv -} -{ - bug_21479a - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFPasteboardCreate - fun:CFPasteboardCreateUnique - fun:+[NSPasteboard _pasteboardWithName:] - fun:+[NSPasteboard pasteboardWithUniqueName] -} -{ - bug_21479b - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFPasteboardCreate - fun:+[NSPasteboard _pasteboardWithName:] - fun:-[FindPasteboard findPboard] -} -{ - bug_27315 - Memcheck:Leak - fun:_Znw* - fun:_ZNSt8_Rb_treeIlSt4pairIKlPN4llvm8PassInfoEESt10_Select1stIS5_ESt4lessIlESaIS5_EE9_M_insertEPSt18_Rb_tree_node_baseSD_RKS5_ - fun:_ZNSt8_Rb_treeIlSt4pairIKlPN4llvm8PassInfoEESt10_Select1stIS5_ESt4lessIlESaIS5_EE13insert_uniqueERKS5_ - fun:_ZN4llvm16RegisterPassBase12registerPassEv - fun:_Z41__static_initialization_and_destruction_0ii - fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj - fun:_ZN11ImageLoader15runInitializersERKNS_11LinkContextE -} -{ - bug_27644 - Memcheck:Leak - ... - fun:_ZN19WebSharedWorkerStub9OnConnectEii -} -{ - bug_28847a - Memcheck:Leak - fun:_Znw* - fun:_ZN13WorkerService12CreateWorkerERK4GURLbbRKSbItN4base20string16_char_traitsESaItEEiiPN3IPC7Message6SenderEi - fun:_ZN21ResourceMessageFilter14OnCreateWorkerERK4GURLbRKSbItN4base20string16_char_traitsESaItEEiPi -} -{ - bug_28847b - Memcheck:Leak - fun:_Znw* - fun:_ZN16ChildProcessHost6LaunchERKSt6vectorISt4pairISsSsESaIS2_EEP11CommandLine - fun:_ZN17WorkerProcessHost4InitEv - fun:_ZN13WorkerService12CreateWorkerERK4GURLbbRKSbItN4base20string16_char_traitsESaItEEiiPN3IPC7Message6SenderEi - fun:_ZN21ResourceMessageFilter14OnCreateWorkerERK4GURLbRKSbItN4base20string16_char_traitsESaItEEiPi -} -{ - bug_28072a - Memcheck:Leak - ... - fun:CSBackupSetItemExcluded - fun:_ZN8mac_util22SetFileBackupExclusionE* - fun:_ZN7history15HistoryDatabase4InitE* - fun:_ZN7history14HistoryBackend8InitImplEv - fun:_ZN7history14HistoryBackend4InitEb -} -{ - bug_28072b - Memcheck:Leak - fun:_Znw* - fun:_ZN7history14HistoryBackend8InitImplEv - fun:_ZN7history14HistoryBackend4InitEb -} -{ - bug_28072c - Memcheck:Unaddressable - ... - fun:CSBackupSetItemExcluded - fun:_ZN8mac_util22SetFileBackupExclusionE* - fun:_ZN7history15HistoryDatabase4InitE* - fun:_ZN7history14HistoryBackend8InitImplEv - fun:_ZN7history14HistoryBackend4InitEb -} -{ - bug_28072d - Memcheck:Unaddressable - ... - fun:CSBackupSetItemExcluded - fun:_ZN4base3mac22SetFileBackupExclusionE* - fun:_ZN7history15HistoryDatabase4InitE* - fun:_ZN7history14HistoryBackend8InitImplERKSs - fun:_ZN7history14HistoryBackend4InitERKSsb -} - -# Note: bug 31634 happens very sporatically. -{ - bug_31634 - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:__CFDictionaryInit - fun:CFDictionaryCreate - fun:classDescription -} -{ - bug_35164 - Memcheck:Uninitialized - ... - fun:gl_context_init_client_state - fun:ogl_begin_rendering - fun:CARenderOGLRender - fun:view_draw -} -{ - bug_35625 - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CGTypeCreateInstanceWithAllocator - fun:CGTypeCreateInstance - fun:CGFunctionCreate - fun:CGGradientGetFunction - fun:CGContextDrawLinearGradient - ... - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] -} -{ - bug_40429 - Memcheck:Leak - fun:calloc - fun:_internal_class_createInstanceFromZone - fun:_internal_class_createInstance - fun:+[NSObject allocWithZone:] - ... - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSButtonCell initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSControl initWithCoder:] - fun:-[NSButton initWithCoder:] - fun:_decodeObjectBinary - fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] - fun:-[NSArray(NSArray) initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSView initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject -} -{ - bug_40429b - Memcheck:Leak - fun:calloc - fun:_internal_class_createInstanceFromZone - ... - fun:+[NSObject allocWithZone:] - ... - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSNibConnector initWithCoder:] - fun:-[NSNibControlConnector initWithCoder:] - fun:_decodeObjectBinary - fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] - fun:-[NSArray(NSArray) initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSIBObjectData initWithCoder:] - fun:_decodeObjectBinary -} -{ - bug_40429c - Memcheck:Leak - fun:calloc - fun:_internal_class_createInstanceFromZone - fun:_internal_class_createInstance - fun:+[NSObject allocWithZone:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSButtonCell initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSControl initWithCoder:] - fun:-[NSButton initWithCoder:] - fun:_decodeObjectBinary - fun:-[NSKeyedUnarchiver _decodeArrayOfObjectsForKey:] - fun:-[NSArray(NSArray) initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSView initWithCoder:] - fun:_decodeObjectBinary - fun:_decodeObject - fun:-[NSResponder initWithCoder:] - fun:-[NSView initWithCoder:] -} -{ - bug_40659 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN19extension_file_util13LoadExtensionE* - fun:_ZN12CrxInstaller15CompleteInstallEv -} -{ - bug_47949_a - Memcheck:Uninitialized - ... - fun:ripc_DrawRects - fun:CGContextFillRects - fun:CGContextFillRect - fun:NSRectFill - fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv -} -{ - bug_47949_b - Memcheck:Uninitialized - ... - fun:ripc_DrawRects - fun:CGContextFillRects - fun:CGContextFillRect - fun:NSRectFill - fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv -} -{ - bug_47949_c - Memcheck:Leak - ... - fun:ripc_DrawRects - fun:CGContextFillRects - fun:CGContextFillRect - fun:NSRectFill - fun:_ZN18FocusIndicationFix40currentOSHasSetFocusRingStyleInBitmapBugEv -} -{ - bug_50286 - Memcheck:Leak - fun:_Znw* - fun:_ZN11ProfileImpl14InitExtensionsEv - fun:_ZN14ProfileManager10AddProfileEP7Profileb - fun:_ZN14ProfileManager10GetProfileE* - fun:_ZN14ProfileManager10GetProfileE* - fun:_ZN14ProfileManager17GetDefaultProfileE* - fun:_ZN12_GLOBAL__N_113CreateProfileE* - fun:_Z11BrowserMainRK18MainFunctionParams - fun:ChromeMain - fun:main -} -{ - bug_50297_a - Memcheck:Uninitialized - fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv - fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi - fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_ - ... - fun:event_process_active - fun:event_base_loop - fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE - fun:_ZN4base11MessageLoop11RunInternalEv -} -{ - bug_50297_b - Memcheck:Uninitialized - fun:_ZN6Pickle8FindNextEmPKcS1_ - fun:_ZN3IPC7Message8FindNextEPKcS2_ - fun:_ZN3IPC7Channel11ChannelImpl23ProcessIncomingMessagesEv - fun:_ZN3IPC7Channel11ChannelImpl28OnFileCanReadWithoutBlockingEi - fun:_ZN4base19MessagePumpLibevent21FileDescriptorWatcher28OnFileCanReadWithoutBlockingEiPS0_ - ... - fun:event_process_active - fun:event_base_loop - fun:_ZN4base19MessagePumpLibevent3RunEPNS_11MessagePump8DelegateE - fun:_ZN4base11MessageLoop11RunInternalEv -} -{ - bug_50638_a - Memcheck:Uninitialized - fun:gleUpdateViewScissorData - ... - fun:cgl_set_surface - fun:ogl_attach_surface - fun:ogl_render_fade_transition - fun:ogl_render_layer_ - ... - fun:ogl_render_layers - fun:CARenderOGLRender - fun:view_draw -} -{ - bug_50638_b - Memcheck:Uninitialized - fun:gleUpdateViewScissorData - fun:cgl_set_surface - fun:ogl_attach_surface - fun:ogl_render_layer_contents_bg - fun:ogl_render_layer_image_ - fun:ogl_render_layer_ - fun:ogl_render_layer_image_ - fun:ogl_render_layer_ - fun:ogl_render_layer_image_ - fun:ogl_render_layer_ - fun:ogl_render_layers - fun:CARenderOGLRender - fun:view_draw -} -{ - bug_50968 - Memcheck:Unaddressable - fun:sqlite3PcacheClearSyncFlags - fun:syncJournal - fun:pagerStress - fun:sqlite3PcacheFetch - fun:sqlite3PagerAcquire2 - fun:sqlite3PagerAcquire - fun:btreeGetPage - fun:allocateBtreePage - fun:btreeCreateTable - fun:sqlite3BtreeCreateTable - fun:sqlite3VdbeExec - fun:sqlite3Step - fun:sqlite3_step - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc - fun:_ZN17TokenServiceTable4InitEv - fun:_ZN11WebDatabase4InitE* - fun:_ZN14WebDataService29InitializeDatabaseIfNecessaryEv -} -{ - bug_52681_a - Memcheck:Leak - fun:_Znw* - fun:_ZN16ChildProcessHost13CreateChannelEv - fun:_ZN18UtilityProcessHost12StartProcessE* - fun:_ZN18UtilityProcessHost22StartExtensionUnpackerE* -} -{ - bug_52681_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN16ChildProcessHost13CreateChannelEv - fun:_ZN18UtilityProcessHost12StartProcessE* - fun:_ZN18UtilityProcessHost22StartExtensionUnpackerE* - fun:_ZN26SandboxedUnpacker22StartProcessOnIOThreadE* -} -{ - bug_53742_a - Memcheck:Uninitialized - ... - fun:_ZN16AudioQueueObject12ConvertInputEP9AQCommandRmb - fun:_ZN16AudioQueueObject12RunConverterEi - fun:_ZN18AQConverterManager17AQConverterThread3RunEv - fun:_ZN18AQConverterManager17AQConverterThread20ConverterThreadEntryEPv - fun:_ZN9CAPThread5EntryEPS_ - fun:_pthread_start - fun:thread_start -} -{ - bug_53742_b - Memcheck:Uninitialized - fun:_ZN16AudioQueueObject12ConvertInputEP9AQCommandRmb - fun:_ZN16AudioQueueObject5ResetEv - fun:_ZN16AudioQueueObject4StopEb -} -{ - bug_53989_a - Memcheck:Uninitialized - fun:glvm_function_new - fun:glvmCreateModularFunction - fun:gleGetVertexSubmitFuncObjectAndKey - fun:gleSetVertexArrayFunc - fun:gleDrawArraysOrElements_ExecCore - fun:gleDrawArraysOrElements_IMM_Exec - fun:gl_context_draw - fun:ogl_array_flush - fun:ogl_primitives_end_ - ... - fun:CARenderOGLRender - fun:view_draw - fun:view_display_link - fun:link_callback -} -{ - bug_53989_b - Memcheck:Uninitialized - fun:glvm_function_hash_value_6 - fun:glvm_hash_set_* - fun:glvm*ModularFunction*Cache - fun:gleGetVertexSubmitFuncObjectAndKey - fun:gleSetVertexArrayFunc - fun:gleDrawArraysOrElements_ExecCore - fun:gleDrawArraysOrElements_IMM_Exec - fun:gl_context_draw - fun:ogl_array_flush - fun:ogl_primitives_end_ - ... - fun:CARenderOGLRender - fun:view_draw - fun:view_display_link -} -{ - bug_53989_c - Memcheck:Uninitialized - ... - fun:gleGetVertexSubmitFuncObjectAndKey - fun:gleSetVertexArrayFunc - fun:gleDrawArraysOrElements_ExecCore - fun:gleDrawArraysOrElements_IMM_Exec - fun:gl_context_draw - fun:ogl_array_flush - fun:ogl_primitives_end_ - ... - fun:CARenderOGLRender - fun:view_draw - fun:view_display_link - fun:link_callback -} -{ - bug_55773 - Memcheck:Unaddressable - fun:sseCGSFill8by1 - fun:argb32_mark_constshape - fun:argb32_mark - fun:ripl_BltShape - fun:ripc_Render - fun:ripc_DrawRects - fun:CGContextFillRects - fun:CGContextFillRect - fun:NSRectFill - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] - fun:-[NSWindow displayIfNeeded] - fun:-[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] - fun:-[NSWindow orderWindow:relativeTo:] - fun:-[NSWindow addChildWindow:ordered:] - fun:-[GTMWindowSheetController(PrivateMethods) beginSystemSheet:withInfo:modalForView:withParameters:] - fun:-[GTMWindowSheetController beginSystemSheet:modalForView:withParameters:] - fun:-[GTMWindowSheetController beginSheet:modalForView:modalDelegate:didEndSelector:contextInfo:] -} -{ - bug_58860_a - Memcheck:Unaddressable - fun:memcpy - ... - fun:FSFindFolder - fun:_ZN12_GLOBAL__N_124GetPluginCommonDirectoryE* - fun:_ZN6webkit5npapi10PluginList20GetPluginDirectoriesE* - fun:_ZN6webkit5npapi10PluginList11LoadPluginsEb - fun:_ZN6webkit5npapi10PluginList10GetPluginsEbPSt6vectorI13WebPluginInfoSaIS2_EE - fun:_ZN13PluginUpdater30GetPreferencesDataOnFileThreadEPv -} -{ - bug_58860_b - Memcheck:Unaddressable - ... - fun:FSFindFolder - fun:_ZN12_GLOBAL__N_124GetPluginCommonDirectoryE* - fun:_ZN6webkit5npapi10PluginList20GetPluginDirectoriesE* - fun:_ZN6webkit5npapi10PluginList11LoadPluginsEb - fun:_ZN6webkit5npapi10PluginList10GetPluginsEbPSt6vectorI13WebPluginInfoSaIS2_EE - fun:_ZN13PluginUpdater30GetPreferencesDataOnFileThreadEPv -} -{ - bug_51682a - Memcheck:Leak - fun:malloc - fun:__cxa_get_globals - fun:__cxa_allocate_exception - fun:_ZN8Security9CssmError7throwMeEi - fun:_ZN9RSASigner6verifyEPKvmS1_m - fun:_ZN16SignatureContext5finalERKN8Security8CssmDataE - fun:_ZL20cssm_VerifyDataFinallyPK9cssm_data - fun:CSSM_VerifyDataFinal - fun:_ZN4base17SignatureVerifier11VerifyFinalEv - fun:_ZN36SignatureVerifierTest_BasicTest_Test8TestBodyEv -} -{ - bug_51682b - Memcheck:Leak - fun:malloc - fun:__cxa_get_globals - fun:__cxa_allocate_exception - fun:_ZN8Security9CssmError7throwMeEi - ... - fun:SecTrustEvaluate -} -{ - bug_51682c - Memcheck:Leak - fun:realloc - fun:_ZN16DefaultAllocator7reallocEPvm - fun:_ZN8Security28CssmAllocatorMemoryFunctions12relayReallocEPvmS1_ - fun:_ZNK8Security19CssmMemoryFunctions7reallocEPvm - fun:_ZN8Security28CssmMemoryFunctionsAllocator7reallocEPvm - fun:_ZN10Attachment13upcallReallocElPvj - fun:_ZN8Security13PluginSession7reallocEPvm - fun:_ZN17DecodedExtensions12addExtensionERK9cssm_databPvbPK22SecAsn1Template_structPS1_ - fun:_ZN17DecodedExtensions13decodeFromNssEPP17NSS_CertExtension - fun:_ZN11DecodedCertC2ER18AppleX509CLSessionRKN8Security8CssmDataE - fun:_ZN18AppleX509CLSession22CertGetFirstFieldValueERKN8Security8CssmDataES3_RjRP9cssm_data - fun:_Z27cssm_CertGetFirstFieldValuelPK9cssm_dataS1_PlPjPPS_ - fun:CSSM_CL_CertGetFirstFieldValue -} -{ - bug_60873 - Memcheck:Uninitialized - fun:UTF8ToCString - fun:_Z16UTF8ToClassicHFSPKcmmmPh - fun:_Z14PathMakeFSSpecPKcP6FSSpecPh - fun:NativePathNameToFSSpec - fun:ConvertProfLocation - fun:GetProfileLocationOfSuite - fun:_CMGetProfileOfSuite - fun:CMGetProfileByAVID - fun:CMSCreateDisplayProfile - fun:create - fun:CMSTransformCreate - fun:createBase - fun:initialize - fun:createColorTransform - fun:CGColorTransformCreateMutable - fun:CGBitmapColorTransformCreate - fun:__CGBitmapContextDelegateCreate - fun:__CGBitmapContextDelegateCreate - fun:createBitmapContext - fun:CGBitmapContextCreate - fun:_ZN4skia12_GLOBAL__N_1L16CGContextForDataEPvii - fun:_ZN4skia20BitmapPlatformDevice* -} -{ - bug_61737 - Memcheck:Uninitialized - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE36ParseMemberWithNewPrefixesExpressionEPiPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE14ParseNewPrefixEPiPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE18ParseNewExpressionEPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE27ParseLeftHandSideExpressionEPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE22ParsePostfixExpressionEPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE20ParseUnaryExpressionEPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE21ParseBinaryExpressionEibPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE26ParseConditionalExpressionEbPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE25ParseAssignmentExpressionEbPb - ... - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE19ParseSourceElementsEiPb - fun:_ZN2v88internal9preparser9PreParserINS0_7ScannerENS0_21PartialParserRecorderEE15PreParseProgramEPS3_PS4_b - fun:_ZN2v88internal9ParserApi15PartialPreParseENS0_6HandleINS0_6StringEEEPN7unibrow15CharacterStreamEPNS_9ExtensionE - fun:_ZN2v88internal8Compiler7CompileENS0_6HandleINS0_6StringEEENS2_INS0_6ObjectEEEiiPNS_9ExtensionEPNS0_14ScriptDataImplES6_NS0_11NativesFlagE -} -{ - bug_61929 - Memcheck:Leak - fun:calloc - fun:IOAlloc - fun:CMOpenOrNewAccess - fun:CMOpenProfile - fun:_CMGetProfileOfSuite - fun:CMGetProfileByAVID - fun:CMSCreateDisplayProfile - fun:create - fun:CMSTransformCreate - fun:createBase - fun:initialize - fun:createColorTransform - fun:CGColorTransformCreateMutable - fun:CGBitmapColorTransformCreate - fun:__CGBitmapContextDelegateCreate - fun:__CGBitmapContextDelegateCreate - fun:createBitmapContext - fun:CGBitmapContextCreate -} -{ - bug_63024a - Memcheck:Uninitialized - fun:memcpy - fun:_ZN8Security13NameValuePair9CloneDataERKNS_8CssmDataE - fun:_ZN8Security13NameValuePairC2ERKNS_8CssmDataE - fun:_ZN8Security19NameValueDictionary12MakeFromDataERKNS_8CssmDataE - fun:_ZN8Security19NameValueDictionaryC2ERKNS_8CssmDataE - fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE - fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE - fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_ -} -{ - bug_63024b - Memcheck:Uninitialized - fun:_ZN8Security19NameValueDictionary12MakeFromDataERKNS_8CssmDataE - fun:_ZN8Security19NameValueDictionaryC2ERKNS_8CssmDataE - fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE - fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE - fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_ -} -{ - bug_63024c - Memcheck:Free - fun:_ZdlPv - fun:_ZN8Security19NameValueDictionaryD2Ev - fun:_ZN8Security12KeychainCore12CCallbackMgr7consumeEjjRKNS_8CssmDataE - fun:_ZN8Security14SecurityServer16NotificationPort7receiveERKNS_12MachPlusPlus7MessageE - fun:_ZN8Security12MachPlusPlus10CFAutoPort10cfCallbackEP12__CFMachPortPvlS4_ -} -{ - bug_63670 - Memcheck:Uninitialized - fun:NSIntersectionRect - fun:-[BrowserWindowController tabContentsViewFrameWillChange:frameRect:] - fun:-[TabStripController tabContentsViewFrameWillChange:frameRect:] - fun:-[TabContentsController tabContentsViewFrameWillChange:] - fun:-[ResizeNotificationView setFrame:] - fun:-[TabStripController swapInTabAtIndex:] - fun:-[TabStripController selectTabWithContents:previousContents:atIndex:userGesture:] - fun:_ZN27TabStripModelObserverBridge13TabSelectedAtEP18TabContentsWrapperS1_ib - fun:_ZN13TabStripModel26ChangeSelectedContentsFromEP18TabContentsWrapperib - fun:_ZN13TabStripModel19InsertTabContentsAtEiP18TabContentsWrapperi - fun:_ZN13TabStripModel14AddTabContentsEP18TabContentsWrapperiji - fun:_ZN7browser8NavigateEPNS_14NavigateParamsE - fun:_ZN11BrowserInit17LaunchWithProfile17OpenTabsInBrowserEP7BrowserbRKSt6vectorINS0_3TabESaIS4_EE - fun:_ZN11BrowserInit17LaunchWithProfile17OpenURLsInBrowserEP7BrowserbRKSt6vectorI4GURLSaIS4_EE - fun:_ZN11BrowserInit17LaunchWithProfile17ProcessLaunchURLsEbRKSt6vectorI4GURLSaIS2_EE - fun:_ZN11BrowserInit17LaunchWithProfile6LaunchEP7Profileb - fun:_ZN11BrowserInit13LaunchBrowserE* - fun:_ZN11BrowserInit18ProcessCmdLineImplE* - fun:_ZN11BrowserInit5StartE* -} -{ - bug_64463 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base16MessageLoopProxy22currentEv - fun:_ZN3net12CertVerifier7RequestC2EPS0_PNS_15X509CertificateERKSsiPNS_16CertVerifyResultEP14CallbackRunnerI6Tuple1IiEE -} -{ - bug_65940 - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC11SyncChannelC2ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE - fun:_ZN3IPC11SyncChannelC1ERKNS_13ChannelHandleENS_7Channel4ModeEPNS4_8ListenerEP11MessageLoopbPN4base13WaitableEventE - fun:_ZN11ChildThread4InitEv - fun:_ZN11ChildThreadC2Ev - fun:_ZN13UtilityThreadC2Ev - fun:_ZN13UtilityThreadC1Ev -} -{ - bug_67291 - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN16ExtensionInfoMap12AddExtensionEPK9Extension -} -{ - bug_68090 - Memcheck:Uninitialized - fun:_ZL10AddEncHashP12EncHashTablePKhij - fun:_Z16BuildMacEncTablev - fun:_ZN15TParsingContext13GetParseProcsEv - fun:_ZN19TSFNTParsingContext13GetParseProcsEv - fun:_ZN18TCIDParsingContext13GetParseProcsEv - fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt - fun:_ZN16TType1OTFCIDFont15ParseCFFCIDFontERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContext - fun:_ZN16TType1OTFCIDFontC2ERK19TType1CFFDescriptor - fun:_ZN10TType1Font7GetFontEPK5TFont - fun:_ZN12TType1StrikeC2EPK5TFontmPK13FontVariationRK15StrikeTransform - fun:_ZN12TType1Strike9GetStrikeERK18TStrikeDescription - fun:_Z19Type1GetStrikeSpecsmPK18TStrikeDescriptionP11StrikeSpecs - fun:_ZNK19TConcreteFontScaler14GetFontMetricsEv - ... - fun:_ZNK9TBaseFont20CalculateFontMetricsEb - fun:_ZNK9TBaseFont15InitFontMetricsEv - fun:_ZNK9TBaseFont16GetStrikeMetricsEfPK17CGAffineTransformb -} -{ - bug_73036 - Memcheck:Leak - fun:malloc_zone_calloc - fun:_internal_class_createInstanceFromZone - fun:NSAllocateObject - fun:+[NSHashTable alloc] - fun:+[NSTrackingArea initialize] - fun:_class_initialize - fun:_class_lookupMethodAndLoadCache - fun:objc_msgSend -} -{ - bug_73299_b - Memcheck:Leak - fun:_Znw* - ... - fun:_ZN24BrowserRenderProcessHost4InitEb - fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE - fun:_ZN13ExtensionHost19CreateRenderViewNowEv - fun:_ZN13ExtensionHost20ProcessCreationQueue14ProcessOneHostEv -} -{ - bug_75136a - Memcheck:Unaddressable - ... - fun:CFBundlePreflightExecutable -} -{ - bug_75136b - Memcheck:Unaddressable - ... - fun:CFBundlePreflightExecutable -} -{ - bug_75142a - Memcheck:Unaddressable - ... - fun:CGContextShowGlyphsWithAdvances -} -{ - bug_75142b - Memcheck:Leak - ... - fun:CGContextShowGlyphsWithAdvances -} -{ - bug_75714_a - Memcheck:Unaddressable - ... - fun:argb32_mark - fun:ripl_BltShape - ... - fun:ripc_Render* - ... - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - ... - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] -} -{ - bug_75714_b - Memcheck:Unaddressable - ... - fun:argb32_mark - fun:ripl_BltShape - fun:ripc_Render - ... - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - ... - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] -} -{ - bug_75714_c - Memcheck:Unaddressable - ... - fun:argb32_image - fun:ripd_Mark - fun:ripl_BltImage - ... - fun:ripc_Render* - ... - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - ... - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] -} -{ - bug_77265_a - Memcheck:Leak - fun:calloc - ... - fun:-[BubbleView drawRect:] - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] - fun:-[NSWindow _setFrameCommon:display:stashSize:] - fun:-[NSWindow setFrame:display:] - fun:-[NSWindow setValue:forKey:] - fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:] - fun:-[NSInFlightAnimation advanceToTime:] - fun:-[NSAnimationManager animationTimerFired:] - fun:__NSFireTimer -} -{ - bug_77265_b - Memcheck:Leak - fun:calloc - fun:CGClipStackCreateMutableCopy - fun:maybeCopyClipState - fun:CGGStateClipToRect - fun:CGContextClipToRect - fun:CGContextClipToRects - fun:NSRectClipList - fun:-[NSView _drawRect:clip:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] - fun:-[NSWindow _setFrameCommon:display:stashSize:] - fun:-[NSWindow setFrame:display:] - fun:-[NSWindow setValue:forKey:] - fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:] - fun:-[NSInFlightAnimation advanceToTime:] - fun:-[NSAnimationManager animationTimerFired:] - fun:__NSFireTimer -} -{ - bug_77265_c - Memcheck:Leak - fun:calloc - fun:CGClipStackCreateMutableCopy - fun:maybeCopyClipState - fun:CGGStateClipToRect - fun:CGContextClipToRect - fun:NSRectClip - fun:-[NSFocusState flush] - fun:-[NSView lockFocusIfCanDraw] - fun:-[NSView lockFocus] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] - fun:-[NSWindow _setFrameCommon:display:stashSize:] - fun:-[NSWindow setFrame:display:] - fun:-[NSWindow setValue:forKey:] - fun:-[NSObject(NSKeyValueCoding) setValue:forKeyPath:] - fun:-[NSInFlightAnimation advanceToTime:] - fun:-[NSAnimationManager animationTimerFired:] - fun:__NSFireTimer -} -{ - bug_77388_a - Memcheck:Uninitialized - ... - fun:PrivateMPEntryPoint - fun:_pthread_start - fun:thread_start -} -{ - bug_77388_b - Memcheck:Uninitialized - ... - fun:PrivateMPEntryPoint - fun:_pthread_start - fun:thread_start -} -{ - bug_77388_c - Memcheck:Param - access_extended(entries) - fun:accessx_np - ... - fun:PrivateMPEntryPoint - fun:_pthread_start - fun:thread_start -} -{ - bug_77388_d - Memcheck:Uninitialized - fun:TestAndSetClear - fun:TestAndClear - fun:_ZN5TNode28UnregisterChangeNotificationERK11TCountedPtrI21TClientChangeNotifierEmb - fun:NodeUnregisterChangeNotification - fun:NodeUnRegisterChildChangedNotification - fun:-[NSNavFBENode _unregisterForChildChangedNotifications] - fun:_commonTearDown_NSNavFBENode - fun:-[NSNavFBENode dealloc] - fun:CFRelease - fun:__CFSetDeallocate - fun:_CFRelease - fun:-[NSOutlineView dealloc] - fun:-[NSTrackableOutlineView dealloc] -} -{ - bug_79994 - Memcheck:Uninitialized - ... - fun:gleUpdateState - fun:gleInitializeContext - fun:gliCreateContext - fun:CGLRestoreDispatchFunction - fun:CGLCreateContext -} -{ - bug_80239_a - Memcheck:Unaddressable - ... - fun:CGLCreateContext - fun:-[NSOpenGLContext initWithFormat:shareContext:] - fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:] - fun:_ZN23RenderWidgetHostViewMac30AllocateFakePluginWindowHandleEbb - fun:_ZN23RenderWidgetHostViewMac21GetCompositingSurfaceEv - fun:_ZN16RenderWidgetHost21GetCompositingSurfaceEv - fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE - fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP14RenderViewHost - fun:_ZN22RenderFrameHostManager14InitRenderViewEP14RenderViewHostRK15NavigationEntry -} -{ - bug_80239_b - Memcheck:Unaddressable - ... - fun:CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext - fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:] - fun:_ZN23RenderWidgetHostViewMac30AllocateFakePluginWindowHandleEbb - fun:_ZN23RenderWidgetHostViewMac21GetCompositingSurfaceEv - fun:_ZN16RenderWidgetHost21GetCompositingSurfaceEv - fun:_ZN14RenderViewHost16CreateRenderViewERKSbItN4base20string16_char_traitsESaItEE - fun:_ZN15WebContentsImpl32CreateRenderViewForRenderManagerEP14RenderViewHost -} -{ - bug_82328 - Memcheck:Unaddressable - fun:CGSFillDRAM64 - fun:argb32_mark_pixelshape - ... - fun:ripc_DrawImages - fun:CGContextDrawImages - fun:_ZN11CUIRenderer19DrawWindowFrameDarkEPK10CUIContext - fun:_ZN11CUIRenderer4DrawE6CGRectP9CGContextPK14__CFDictionaryPS5_ - fun:_NSDrawThemeBackground -} -{ - bug_82682 - Memcheck:Leak - ... - fun:_ZN6webkit5npapi12_GLOBAL__N_119ReadPlistPluginInfoE* -} -{ - bug_84329 - Memcheck:Unaddressable - fun:_ZN3WTF17ChromiumThreading16callOnMainThreadEPFvPvES1_ - fun:_ZN3WTF16callOnMainThreadEPFvPvES0_ - fun:_ZN5blink13WebWorkerBase24dispatchTaskToMainThreadEN3WTF10PassOwnPtrIN7WebCore22ScriptExecutionContext4TaskEEE - fun:_ZN5blink13WebWorkerBase21reportPendingActivityEb -} -{ - bug_86303a - Memcheck:Unaddressable - ... - fun:objc_msgSend* -} -{ - bug_86303b - Memcheck:Unaddressable - ... - fun:-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] - fun:-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] - fun:-[NSView displayIfNeeded] - fun:-[NSWindow displayIfNeeded] - fun:_handleWindowNeedsDisplay -} -{ - bug_87461 - Memcheck:Leak - ... - fun:_ZN15StatusBubbleMac6CreateEv - fun:_ZN15StatusBubbleMacC2EP8NSWindowP11objc_object - fun:-[BrowserWindowController initWithBrowser:takeOwnership:] - fun:-[BrowserWindowController initWithBrowser:] - fun:_ZN13BrowserWindow19CreateBrowserWindowEP7Browser - fun:_ZN7Browser19CreateBrowserWindowEv - fun:_ZN7Browser17InitBrowserWindowEv - fun:_ZN7Browser6CreateEP7Profile - fun:_ZN11BrowserInit17LaunchWithProfile17OpenTabsInBrowserEP7BrowserbRKSt6vectorINS0_3TabESaIS4_EE - fun:_ZN11BrowserInit17LaunchWithProfile17OpenURLsInBrowserEP7BrowserbRKSt6vectorI4GURLSaIS4_EE - fun:_ZN11BrowserInit17LaunchWithProfile17ProcessLaunchURLsEbRKSt6vectorI4GURLSaIS2_EE - fun:_ZN11BrowserInit17LaunchWithProfile6LaunchEP7ProfileRKSt6vectorI4GURLSaIS4_EEb - fun:_ZN11BrowserInit13LaunchBrowserE* - fun:_ZN11BrowserInit18ProcessCmdLineImplE* - fun:_ZN11BrowserInit5StartE* -} -{ - bug_87629 - Memcheck:Leak - ... - fun:realloc - fun:new_sem_from_pool -} -{ - bug_90976 - Memcheck:Unaddressable - ... - fun:_CFPropertyListCreateFromXMLData - fun:CFPropertyListCreateFromStream - fun:+[CFXPreferencesPropertyListSource createPlistFromFile:statInfo:] - fun:-[CFXPreferencesPropertyListSource synchronize] - fun:CFPreferencesSynchronize - fun:_CSBackupSettingsIsPathExcluded - fun:CSBackupIsItemExcluded - fun:pager_open_journal - fun:pager_write - fun:sqlite3PagerWrite - fun:newDatabase - fun:sqlite3BtreeBeginTrans - fun:sqlite3VdbeExec - fun:sqlite3Step - fun:sqlite3_step - fun:sqlite3_exec - fun:_ZN3sql10Connection7ExecuteEPKc -} -{ - bug_91889_a - Memcheck:Unaddressable - fun:_ZN4base12_GLOBAL__N_122StackDumpSignalHandlerEiP9__siginfoP17__darwin_ucontext - obj:* - fun:IOCFUnserialize - fun:IORegistryEntrySearchCFProperty - fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString - fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo - fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo - fun:_ZN14GpuDataManagerC2Ev - fun:_ZN14GpuDataManagerC1Ev - fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv - fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv - fun:_ZN14GpuDataManager11GetInstanceEv - fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv -} -{ - bug_91889_b - Memcheck:Unaddressable - fun:IOCFUnserializeparse - fun:IOCFUnserialize - fun:IORegistryEntrySearchCFProperty - fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString - fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo - fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo - fun:_ZN14GpuDataManagerC2Ev - fun:_ZN14GpuDataManagerC1Ev - fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv - fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv - fun:_ZN14GpuDataManager11GetInstanceEv - fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv -} -{ - bug_91889_c - Memcheck:Unaddressable - fun:_ZN4base12_GLOBAL__N_122StackDumpSignalHandlerEiP9__siginfoP17__darwin_ucontext - obj:* - obj:* - fun:IOCFUnserialize - fun:IORegistryEntrySearchCFProperty - fun:_ZN12_GLOBAL__N_121SearchPortForPropertyEjPK10__CFString - fun:_ZN12_GLOBAL__N_123CollectPCIVideoCardInfoEP7GPUInfo - fun:_ZN18gpu_info_collector30CollectPreliminaryGraphicsInfoEP7GPUInfo - fun:_ZN14GpuDataManagerC2Ev - fun:_ZN14GpuDataManagerC1Ev - fun:_ZN22DefaultSingletonTraitsI14GpuDataManagerE3NewEv - fun:_ZN9SingletonI14GpuDataManager22DefaultSingletonTraitsIS0_ES0_E3getEv - fun:_ZN14GpuDataManager11GetInstanceEv - fun:_ZN19GpuBlacklistUpdater17SetupOnFileThreadEv -} -{ - bug_91892 - Memcheck:Leak - fun:_Znw* - fun:sendSimpleEventToSelf - fun:aeInitializeFromHIToolbox - fun:INIT_AppleEvents - fun:_FirstEventTime - fun:RunCurrentEventLoopInMode - fun:ReceiveNextEventCommon - fun:BlockUntilNextEventMatchingListInMode - fun:_DPSNextEvent - fun:-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] - fun:-[NSApplication run] - fun:_ZN4base24MessagePumpNSApplication5DoRunEPNS_11MessagePump8DelegateE - fun:_ZN4base24MessagePumpCFRunLoopBase3RunEPNS_11MessagePump8DelegateE - fun:_ZN4base11MessageLoop11RunInternalEv - fun:_ZN4base11MessageLoop10RunHandlerEv - fun:_ZN4base11MessageLoop13RunAllPendingEv - fun:_ZN20InProcessBrowserTest23RunTestOnMainThreadLoopEv -} -{ - bug_92579a - Memcheck:Unaddressable - fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj - fun:CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext -} -{ - bug_92579b - Memcheck:Unaddressable - fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj - fun:_ZN15CVCGDisplayLink18initWithCGDisplaysEPjlPi - fun:CVDisplayLinkCreateWithCGDisplays - fun:CVDisplayLinkCreateWithActiveCGDisplays -} -{ - bug_92579c - Memcheck:Unaddressable - fun:IOCFUnserializeparse - fun:IOCFUnserialize - fun:IORegistryEntryCreateCFProperties - fun:_ZN15CVCGDisplayLink17setCurrentDisplayEj - fun:_ZN15CVCGDisplayLink18initWithCGDisplaysEPjlPi - fun:CVDisplayLinkCreateWithCGDisplays - fun:CVDisplayLinkCreateWithActiveCGDisplays - fun:-[AcceleratedPluginView initWithRenderWidgetHostViewMac:pluginHandle:] -} -{ - bug_93036 - Memcheck:Unaddressable - fun:+[NSPICTImageRep _verifyDataIsPICT:] - fun:+[NSImageRep imageRepClassForData:] - fun:-[NSImage initWithData:] - fun:_ZN2ui14ResourceBundle19GetNativeImageNamedEi - fun:-[BookmarkBarController initWithBrowser:initialWidth:delegate:resizeDelegate:] -} -{ - bug_93932_a - Memcheck:Overlap - fun:memcpy - fun:vp8_decode_update_thread_context - fun:update_context_from_thread - ... - fun:ff_thread_decode_frame - fun:avcodec_decode_video2 - fun:_ZN5media23FFmpegVideoDecodeEngine6DecodeERK13scoped_refptrINS_6BufferEEPS1_INS_10VideoFrameEE - fun:_ZN5media18FFmpegVideoDecoder14DoDecodeBufferERK13scoped_refptrINS_6BufferEE -} -{ - bug_93932_b - Memcheck:Overlap - fun:memcpy - fun:vp8_decode_update_thread_context - fun:update_context_from_thread - fun:frame_thread_free - fun:avcodec_close - ... - fun:_ZN5media23FFmpegVideoDecodeEngineD0Ev - fun:_ZN10scoped_ptrIN5media23FFmpegVideoDecodeEngineEE5resetEPS1_ - fun:_ZN5media27FFmpegVideoDecodeEngineTestD2Ev - fun:_ZN5media51FFmpegVideoDecodeEngineTest_DecodeFrame_Normal_TestD0Ev -} -{ - bug_96300 - Memcheck:Leak - ... - fun:_ZN8Security12KeychainCore5Trust8evaluate* - fun:SecTrustEvaluate - fun:_ZN3net17CertVerifyProcMac14VerifyInternal* - fun:_ZN3net14CertVerifyProc6Verify*CertVerifyResult* -} -{ - bug_96559a - Memcheck:Uninitialized - fun:PyObject_Realloc -} -{ - bug_96559b - Memcheck:Unaddressable - fun:PyObject_Realloc -} -{ - bug_96559c - Memcheck:Uninitialized - fun:PyObject_Realloc -} -{ - bug_96559d - Memcheck:Uninitialized - fun:PyObject_Free -} -{ - bug_96559e - Memcheck:Unaddressable - fun:PyObject_Free -} -{ - bug_96559f - Memcheck:Uninitialized - fun:PyObject_Free -} -{ - bug_96671 - Memcheck:Uninitialized - ... - fun:_ZNK12MockKeychain26SearchCreateFromAttributesEPKvmPK24SecKeychainAttributeListPP26OpaqueSecKeychainSearchRef - fun:_ZN14KeychainSearch17FindMatchingItemsEPSt6vectorIP24OpaqueSecKeychainItemRefSaIS2_EE -} -{ - bug_96689 - Memcheck:Uninitialized - fun:_ZN3net11SSLHostInfo10ParseInnerERKSs - fun:_ZN3net11SSLHostInfo5ParseERKSs - fun:_ZN3net25DiskCacheBasedSSLHostInfo22DoWaitForDataReadyDoneEv - fun:_ZN3net25DiskCacheBasedSSLHostInfo6DoLoopEi - fun:_ZN3net25DiskCacheBasedSSLHostInfo12OnIOCompleteEPNS0_22CacheOperationDataShimEi -} -{ - bug_100022 - Memcheck:Unaddressable - ... - fun:_ZNK11ImageLoader15containsAddressEPKv - fun:_ZN4dyld14bindLazySymbolEPK11mach_headerPm - fun:stub_binding_helper_interface2 - obj:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib - obj:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/libRIP.A.dylib - fun:CGContextDrawImage - fun:_Z23PlotISImageRefInContextPvP9CGContext6CGRectssPK8RGBColormPK20_ISImageRefCallbacks - fun:PlotIconRefInContext -} -{ - bug_100983 - Memcheck:Leak - fun:_Znw* - fun:_ZN4base18StatisticsRecorder31RegisterOrDeleteDuplicateRangesEPNS_9HistogramE - fun:_ZN4base18StatisticsRecorder25RegisterOrDeleteDuplicateEPNS_9HistogramE - fun:_ZN10disk_cache14StatsHistogram10FactoryGetERKSs - fun:_ZN10disk_cache5Stats4InitEPNS_11BackendImplEPj - fun:_ZN10disk_cache11BackendImpl8SyncInitEv - fun:_ZN10disk_cache9BackendIO23ExecuteBackendOperationEv -} -{ - bug_101359 - Memcheck:Leak - fun:malloc - fun:CGFontNameTableCreate - fun:get_name_table - fun:CGFontCopyPostScriptName - fun:CGFontCreateFontsWithURL -} -{ - bug_102327_a - Memcheck:Unaddressable - fun:_ZNK15tracked_objects10ThreadData26OnThreadTerminationCleanupEv - fun:_ZN15tracked_objects10ThreadData19OnThreadTerminationEPv - fun:_pthread_tsd_cleanup - fun:_pthread_exit - fun:thread_start -} -{ - bug_102327_b - Memcheck:Leak - fun:_Znw* - fun:_ZN15tracked_objects10ThreadData10InitializeEv - fun:_ZN15tracked_objects10ThreadData23InitializeThreadContextERKSs -} -{ - bug_102621 - Memcheck:Uninitialized - ... - fun:-[NSPasteboard(ChimeraPasteboardURLUtils) getURLs:andTitles:convertingFilenames:] - fun:_ZN2ui33PopulateURLAndTitleFromPasteboardEP4GURLPSbItN4base20string16_char_traitsESaItEEP12NSPasteboarda - fun:_ZN24WebDragDestTest_URL_Test8TestBodyEv -} -{ - bug_102920 - Memcheck:Unaddressable - fun:MDItemCreate - fun:CSBackupSetItemExcluded - fun:_ZN4base3mac22SetFileBackupExclusionE* - fun:_ZN7history17ThumbnailDatabase4InitE* - fun:_ZN7history14HistoryBackend8InitImplERKSs - fun:_ZN7history14HistoryBackend4InitERKSsb -} -{ - bug_104756 - Memcheck:Leak - fun:_Znw* - fun:_ZN3IPC11SyncMessage13GenerateReplyEPKNS_7MessageE - fun:_ZN3IPC17SyncMessageSchemaI6Tuple1IbES1_IRSt6vectorIN6webkit13WebPluginInfoESaIS5_EEEE32DispatchDelayReplyWithSendParamsI19RenderMessageFilterMSC_FvbPNS_7MessageEEEEbbRKS2_PKSD_PT_T0_ - fun:_ZN22ViewHostMsg_GetPlugins18DispatchDelayReplyI19RenderMessageFilterMS1_FvbPN3IPC7MessageEEEEbPKS3_PT_T0_ - fun:_ZN19RenderMessageFilter17OnMessageReceivedERKN3IPC7MessageEPb - fun:_ZN20BrowserMessageFilter15DispatchMessageERKN3IPC7MessageE -} -{ - bug_104786 - Memcheck:Leak - fun:_Znw* - fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKjiEEE8allocateEmPKv - fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE11_M_get_nodeEv - fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE14_M_create_nodeERKS2_ - fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE9_M_insertEPSt18_Rb_tree_node_baseSA_RKS2_ - fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13insert_uniqueERKS2_ - fun:_ZNSt8_Rb_treeIjSt4pairIKjiESt10_Select1stIS2_ESt4lessIjESaIS2_EE13insert_uniqueESt17_Rb_tree_iteratorIS2_ERKS2_ - fun:_ZNSt3mapIjiSt4lessIjESaISt4pairIKjiEEE6insertESt17_Rb_tree_iteratorIS4_ERKS4_ - fun:_ZNSt3mapIjiSt4lessIjESaISt4pairIKjiEEEixERS3_ - fun:_ZN18RenderWidgetHelper17AllocTransportDIBEmbPN4base14FileDescriptorE - fun:_ZN19RenderMessageFilter19OnAllocTransportDIBEmbPN4base14FileDescriptorE -} -{ - bug_105022 - Memcheck:Leak - fun:malloc_zone_malloc - fun:malloc_set_zone_name - fun:init__zone0 - fun:setenv$UNIX2003 - fun:_ZN12_GLOBAL__N_115EnvironmentImpl10SetVarImplEPKcRKSs - fun:_ZN12_GLOBAL__N_115EnvironmentImpl6SetVarEPKcRKSs - fun:_Z18AppendToPythonPath*FilePath - fun:_ZN*3net15LocalTestServer13SetPythonPathEv - fun:_ZN3net15LocalTestServer5StartEv - fun:_ZN12_GLOBAL__N_132MimeTypeTests_MimeTypeTests_Test8TestBodyEv -} -{ - bug_105323 - Memcheck:Leak - fun:_Znw* - fun:_ZN15tracked_objects10ThreadData3GetEv - fun:_ZN15tracked_objects10ThreadData32TallyRunOnWorkerThreadIfTrackingEPKNS_6BirthsERKNS_11TrackedTimeES6_S6_ - fun:_ZN4base12_GLOBAL__N_112WorkerThread10ThreadMainEv - fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv -} -{ - bug_105339 - Memcheck:Leak - fun:malloc_zone_malloc - fun:_malloc_internal - fun:_cache_addForwardEntry - fun:lookUpMethod - fun:class_respondsToSelector -} -{ - bug_105341_a - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:allocWorld - fun:create - fun:aquireColorWorldByAttributes - fun:acquireColorWorld - fun:CMSTransformConvert* - fun:CGCMSInterfaceTransformConvert* -} -{ - bug_105341_b - Memcheck:Leak - fun:calloc - fun:_ZN9CMMMemMgr3NewEm - ... - fun:create - fun:aquireColorWorldByAttributes - fun:acquireColorWorld - fun:CMSTransformConvert* - fun:CGCMSInterfaceTransformConvert* -} -{ - bug_105342 - Memcheck:Leak - fun:_Znw* - fun:_ZN15TSessionManager20CreateSessionManagerEv - fun:pthread_once - fun:_ZN15TSessionManagerC1Ev - fun:_ZN13TFontMetadata24CreateMetadataForFontURLEPK7__CFURLb - ... - fun:XTRegisterFont - fun:SendActivateFontsMessage -} -{ - bug_105523 - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:allocGeneric - fun:create - fun:CMSCreateDataProvider - fun:create_generic_color_space - fun:CGColorSpaceCreateWithIndex -} -{ - bug_105524_a - Memcheck:Uninitialized - fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv - fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE - fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPNS_24BufferForAppendingHyphenE - fun:_ZNK7WebCore13InlineTextBox17positionForOffsetEi - fun:_ZN7WebCore10RenderText14localCaretRectEPNS_9InlineBoxEiPi - fun:_ZNK7WebCore15VisiblePosition14localCaretRectERPNS_12RenderObjectE - fun:_ZN7WebCore9CaretBase15updateCaretRectEPNS_8DocumentERKNS_15VisiblePositionE - fun:_ZN7WebCore14FrameSelection14localCaretRectEv - fun:_ZN7WebCore14FrameSelection18recomputeCaretRectEv - fun:_ZN7WebCore14FrameSelection16updateAppearanceEv - fun:_ZN7WebCore14FrameSelection12setSelectionERKNS_16VisibleSelectionEjNS0_19CursorAlignOnScrollENS_15TextGranularityE - fun:_ZN7WebCore14FrameSelection12setSelectionERKNS_16VisibleSelectionENS_15TextGranularityE - fun:_ZN7WebCore14FrameSelection34setNonDirectionalSelectionIfNeededERKNS_16VisibleSelectionENS_15TextGranularityENS0_23EndPointsAdjustmentModeE - fun:_ZN7WebCore12EventHandler49updateSelectionForMouseDownDispatchingSelectStartEPNS_4NodeERKNS_16VisibleSelectionENS_15TextGranularityE - fun:_ZN7WebCore12EventHandler32handleMousePressEventSingleClickERKNS_28MouseEventWithHitTestResultsE - fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_28MouseEventWithHitTestResultsE - fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_18PlatformMouseEventE - fun:_ZN7WebCore12EventHandler29passMousePressEventToSubframeERNS_28MouseEventWithHitTestResultsEPNS_5FrameE - fun:_ZN7WebCore12EventHandler21handleMousePressEventERKNS_18PlatformMouseEventE - fun:_ZN5blink11WebViewImpl9mouseDownERKNS_13WebMouseEventE - fun:_ZN5blink11WebViewImpl16handleInputEventERKNS_13WebInputEventE - fun:_ZN46ContextMenuCapturing_ContextMenuCapturing_Test8TestBodyEv -} -{ - bug_105524_b - Memcheck:Uninitialized - fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv - fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE - fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderLayer10paintLayerEPS0_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPN3WTF7HashMapIPNS_24OverlapTestRequestClientES4_NSB_7PtrHashISE_EENSB_10HashTraitsISE_EENSH_IS4_EEEEj - fun:_ZN7WebCore11RenderLayer9paintListEPN3WTF6VectorIPS0_Lm0EEES3_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPNS1_7HashMapIPNS_24OverlapTestRequestClientES8_NS1_7PtrHashISH_EENS1_10HashTraitsISH_EENSK_IS8_EEEEj - fun:_ZN7WebCore11RenderLayer10paintLayerEPS0_PNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEPN3WTF7HashMapIPNS_24OverlapTestRequestClientES4_NSB_7PtrHashISE_EENSB_10HashTraitsISE_EENSH_IS4_EEEEj - fun:_ZN7WebCore11RenderLayer5paintEPNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEj - fun:_ZN7WebCore9FrameView13paintContentsEPNS_15GraphicsContextERKNS_7IntRectE - fun:_ZN7WebCore10ScrollView5paintEPNS_15GraphicsContextERKNS_7IntRectE - fun:_ZN5blink12WebFrameImpl16paintWithContextERN7WebCore15GraphicsContextERKNS_7WebRectE - fun:_ZN5blink12WebFrameImpl5paintEP9CGContextRKNS_7WebRectE - fun:_ZN5blink11WebViewImpl5paintEP9CGContextRKNS_7WebRectE -} -{ - bug_105525 - Memcheck:Leak - ... - fun:CGContextDrawPath - fun:CGContextFillPath - fun:_NSDrawWindowBackgroundRegion - fun:-[NSThemeFrame drawWindowBackgroundRegion:] -} -{ - bug_105526_read_a - Memcheck:Unaddressable - fun:CGSSetWindowColorSpace - fun:_ZN10WindowData16UpdateColorSpaceEh - fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef - fun:_ZN10WindowData10InitializeEP14OpaqueEventRef - fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef - fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec - fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec - fun:SendEventToEventTargetWithOptions - fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_ - fun:HIObjectCreate -} -{ - bug_105526_read_b - Memcheck:Unaddressable - obj:* - fun:_ZN10WindowData16UpdateColorSpaceEh - fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef - fun:_ZN10WindowData10InitializeEP14OpaqueEventRef - fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef - fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec - fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec - fun:SendEventToEventTargetWithOptions - fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_ - fun:HIObjectCreate -} -{ - bug_105526_write - Memcheck:Unaddressable - fun:CGSColorProfileRelease - fun:CGSSetWindowColorSpace - fun:_ZN10WindowData16UpdateColorSpaceEh - fun:_ZN10WindowData18FinishConstructionEmymPK4RectPhjP15OpaqueWindowPtrP16OpaqueControlRef - fun:_ZN10WindowData10InitializeEP14OpaqueEventRef - fun:_ZN14AppleWindowDef10InitializeEP14OpaqueEventRef - fun:_ZN8HIObject24HandleClassHIObjectEventEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZN8HIObject9EventHookEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv - fun:_ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec - fun:_ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec - fun:SendEventToEventTargetWithOptions - fun:_ZN8HIObject6CreateEPK10__CFStringP14OpaqueEventRefPPS_ - fun:HIObjectCreate -} -{ - bug_105527_a - Memcheck:Leak - fun:_Znw* - fun:_ZN16TCFStringUniquer19CreateStringUniquerEv - fun:pthread_once - fun:_ZN16TCFStringUniquerC1Ev - fun:_ZNK6TCFStr15GetUniqueStringEv - fun:_ZNK17TClientFontEntity14CopyFamilyNameEb - fun:_ZNK11TFontEntity14CopyPropertiesEPK7__CFSetb - fun:_ZNK21TLocalFontRegistryImp37CopyPropertiesForFontsMatchingRequestEPK14__CFDictionaryPK7__CFSetj - fun:XTCopyFontsWithProperties - fun:_ZL20CopyFaceURLsForFontsPK9__CFArrayj - fun:XTRegisterFonts - fun:XTRegisterFont - fun:SendActivateFontsMessage -} -{ - bug_105527_b - Memcheck:Leak - fun:_Znw* - fun:_ZN18TLocalFontRegistry14CreateRegistryEv - fun:pthread_once - fun:_ZN18TLocalFontRegistryC2Ev - fun:XTRegisterFonts - fun:XTRegisterFont - fun:SendActivateFontsMessage -} -{ - bug_105527_c - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFBasicHashCreate - fun:__CFSetCreateGeneric - fun:CFSetCreate - fun:_ZN16TBasicFontEntity21CreateBasicPropertiesEv - fun:pthread_once - fun:_ZN16TBasicFontEntity18GetBasicPropertiesEv - fun:XTCopyFontsWithProperties -} -{ - bug_105527_d - Memcheck:Leak - fun:_Znw* - fun:_ZN19TGlobalFontRegistry14CreateRegistryEv - fun:pthread_once - fun:_ZN19TGlobalFontRegistryC2Ev - fun:XTCopyFontWithName - fun:_ZNK17TDescriptorSource35CopyFontDescriptorPerPostscriptNameEPK10__CFStringm -} -{ - bug_105527_e - Memcheck:Leak - fun:calloc - fun:CGFontFinderCreate - fun:cg_font_library_link_symbol - fun:load_vtable - fun:pthread_once - fun:CGFontGetVTable - fun:CGFontCreateFontsWithPath - fun:CGFontCreateFontsWithURL - fun:_Z18CreateFontsFromURLPK7__CFURL - fun:_ZNK21TLocalFontRegistryImp12RegisterFontEPK7__CFURLPK14__CFDictionaryjj - fun:_ZNK21TLocalFontRegistryImp13RegisterFontsEPK9__CFArrayPK14__CFDictionaryjjPS2_ - fun:_ZNK18TLocalFontRegistry13RegisterFontsEPK9__CFArrayPK14__CFDictionaryjjPS2_ - fun:XTRegisterFonts - fun:XTRegisterFont - fun:SendActivateFontsMessage -} -{ - bug_105580 - Memcheck:Leak - fun:malloc_zone_malloc - fun:malloc_set_zone_name - fun:malloc_default_purgeable_zone - ... - fun:_ZN4base30EnableTerminationOnOutOfMemoryEv - fun:_ZN7leveldb12_GLOBAL__N_111ChromiumEnvC2Ev - ... - fun:_ZN4base25DefaultLazyInstanceTraitsIN7leveldb12_GLOBAL__N_111ChromiumEnvEE3NewEPv - ... - fun:_ZN4base12LazyInstanceIN7leveldb12_GLOBAL__N_111ChromiumEnvENS_* - ... - fun:_ZN7leveldb7OptionsC2Ev - ... - fun:_ZN7fileapi27FileSystemDirectoryDatabase4InitEv - fun:_ZN7fileapi27FileSystemDirectoryDatabase11GetFileInfoExPNS0_8FileInfoE - fun:_ZN7fileapi59FileSystemDirectoryDatabaseTest_TestMissingFileGetInfo_Test8TestBodyEv -} -{ - bug_105938_a - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb - fun:_ZN2v86Script3RunEv - fun:_ZN7WebCore7V8Proxy9runScriptEN2v86HandleINS1_6ScriptE* - fun:_ZN7WebCore7V8Proxy8evaluateERKNS_16ScriptSourceCodeEPNS_4NodeE - fun:_ZN7WebCore16ScriptController8evaluateERKNS_16ScriptSourceCodeE -} -{ - bug_105938_b - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF6StringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb - fun:_ZN2v86Script3RunEv - fun:_ZN7WebCore7V8Proxy9runScriptEN2v86HandleINS1_6ScriptE* - fun:_ZN7WebCore7V8Proxy8evaluateERKNS_16ScriptSourceCodeEPNS_4NodeE - fun:_ZN7WebCore16ScriptController8evaluateERKNS_16ScriptSourceCodeE -} -{ - bug_105938_c - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - ... - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb - fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE - fun:_ZN7WebCore7V8Proxy24instrumentedCallFunctionEPNS_4PageEN2v86HandleINS3_8FunctionEEENS4_INS3_6ObjectEEEiPNS4_INS3_5ValueEEE - fun:_ZN7WebCore7V8Proxy12callFunctionEN2v86HandleINS1_8FunctionEEENS2_INS1_6ObjectEEEiPNS2_INS1_5ValueEEE - fun:_ZN7WebCore19V8LazyEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE - fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE - fun:_ZN7WebCore23V8AbstractEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE - fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE -} -{ - bug_107179 - Memcheck:Uninitialized - fun:_ZNK7WebCore13InlineTextBox17expansionBehaviorEv - fun:_ZNK7WebCore13InlineTextBox16constructTextRunEPNS_11RenderStyleERKNS_4FontEPKtiiPNS_24BufferForAppendingHyphenE - fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_8IntPointEii - fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_8IntPointE - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_8IntPointE - ... - fun:_ZN7WebCore11RenderLayer5paintEPNS_15GraphicsContextERKNS_7IntRectEjPNS_12RenderObjectEPNS_12RenderRegionEj - fun:_ZN7WebCore9FrameView13paintContentsEPNS_15GraphicsContextERKNS_7IntRectE - fun:_ZN7WebCore10ScrollView5paintEPNS_15GraphicsContextERKNS_7IntRectE - fun:_ZN5blink12WebFrameImpl16paintWithContextERN7WebCore15GraphicsContextERKNS_7WebRectE -} -{ - bug_107541_a - Memcheck:Leak - fun:_Znw* - fun:_ZL14NewFromFontRefPK8__CTFontPKc - fun:_Z26SkCreateTypefaceFromCTFontPK8__CTFont - fun:_ZN7WebCoreL10setupPaintEP7SkPaintPKNS_14SimpleFontDataEPKNS_4FontE* - fun:_ZNK7WebCore4Font10drawGlyphsEPNS_15GraphicsContextEPKNS_14SimpleFontDataERKNS_11GlyphBufferEiiRKNS_10FloatPointE - fun:_ZNK7WebCore4Font15drawGlyphBufferEPNS_15GraphicsContextERKNS_7TextRunERKNS_11GlyphBufferERKNS_10FloatPointE - fun:_ZNK7WebCore4Font14drawSimpleTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPointEii - fun:_ZNK7WebCore4Font8drawTextEPNS_15GraphicsContextERKNS_7TextRunERKNS_10FloatPoint* - fun:_ZN7WebCore15GraphicsContext8drawTextERKNS_4FontERKNS_7TextRunERKNS_10FloatPoint* - fun:_ZN7WebCoreL20paintTextWithShadowsEPNS_15GraphicsContextERKNS_4FontERKNS_7TextRunERKN3WTF12AtomicStringEiiiiRKNS_10FloatPointERKNS_9FloatRectEPKNS_10ShadowDataEbb - fun:_ZN7WebCore13InlineTextBox5paintERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore13InlineFlowBox5paintERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore13RootInlineBox5paintERNS_9PaintInfoERKNS_* - fun:_ZNK7WebCore17RenderLineBoxList5paintEPNS_20RenderBoxModelObjectERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_* - ... - fun:_ZN7WebCore11RenderBlock13paintChildrenERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock13paintContentsERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock11paintObjectERNS_9PaintInfoERKNS_* - fun:_ZN7WebCore11RenderBlock5paintERNS_9PaintInfoERKNS_* -} -{ - bug_107541_b - Memcheck:Leak - fun:calloc - fun:CGGlyphBitmapCreate - ... - fun:CGFontCreateGlyphBitmap* - fun:create_missing_bitmaps - fun:CGGlyphLockLockGlyphBitmaps - ... - fun:draw_glyphs - fun:CGContextShowGlyphs - fun:_ZN9Offscreen5getCGERK19SkScalerContext_MacRK7SkGlyph* - fun:_ZN19SkScalerContext_Mac13generateImageERK7SkGlyph - fun:_ZN15SkScalerContext8getImageERK7SkGlyph - fun:_ZN12SkGlyphCache9findImageERK7SkGlyph - fun:_ZL22D1G_NoBounder_RectClipRK12SkDraw1GlyphiiRK7SkGlyph - fun:_ZNK6SkDraw*draw*TextE* - fun:_ZN8SkDevice*draw*TextE* - fun:_ZN8SkCanvas*draw*TextE* -} -{ - bug_107541_c - Memcheck:Leak - fun:_Znw* - fun:_ZL14NewFromFontRefPK8__CTFontPKc - fun:_ZL11NewFromNamePKcN10SkTypeface5StyleE - fun:_ZL15create_typefacePK10SkTypefacePKcNS_5StyleE - fun:_ZN10SkFontHost14CreateTypefaceEPK10SkTypefacePKcNS0_5StyleE - fun:_ZN10SkTypeface14CreateFromNameEPKcNS_5StyleE - fun:_ZN3gfx8internal16SkiaTextRenderer22SetFontFamilyWithStyleERKSsi - fun:_ZN3gfx13RenderTextMac14DrawVisualTextEPNS_6CanvasE - fun:_ZN3gfx10RenderText4DrawEPNS_6CanvasE - fun:_ZN3gfx43RenderTextTest_SelectionKeepsLigatures_Test8TestBodyEv -} -{ - bug_109994 - Memcheck:Leak - ... - fun:_class_lookupMethodAndLoadCache - fun:objc_msgSend - ... - fun:_class_initialize - fun:_class_initialize - fun:_class_lookupMethodAndLoadCache - fun:objc_msgSend - fun:_ZN15ChromeTestSuite10InitializeEv - fun:_ZN4base9TestSuite3RunEv - fun:_ZN17UnitTestTestSuite3RunEv -} -{ - bug_112078 - Memcheck:Uninitialized - fun:glViewport_Exec - fun:glViewport - fun:-[AcceleratedPluginView globalFrameDidChange:] - fun:-[AcceleratedPluginView renewGState] - fun:-[NSView _invalidateGStatesForTree] - fun:-[NSView(NSInternal) _setHidden:setNeedsDisplay:] - fun:-[NSView _setHidden:] - fun:_ZN*23RenderWidgetHostViewMac17MovePluginWindows* - fun:_ZN*27RenderWidgetHostViewMacTest24AddAcceleratedPluginViewEii - fun:_ZN*53RenderWidgetHostViewMacTest_FocusAcceleratedView_Test8TestBodyEv -} -{ - bug_112086 - Memcheck:Uninitialized - fun:x_zone_size - fun:find_registered_purgeable_zone - fun:malloc_make_purgeable -} -{ - bug_117310 - Memcheck:Leak - fun:_Znw* - fun:_ZN7WebCore23v8StringToWebCoreStringIN3WTF12AtomicStringEEET_N2v86HandleINS4_6StringEEENS_12ExternalModeE - fun:_ZN7WebCore29v8StringToAtomicWebCoreStringEN2v86HandleINS0_6StringEEE - fun:_ZN7WebCore11V8DOMWindow19namedPropertyGetterEN2v85LocalINS1_6StringEEERKNS1_12AccessorInfoE - fun:_ZN2v88internal8JSObject26GetPropertyWithInterceptorEPNS0_10JSReceiverEPNS0_6StringEP18PropertyAttributes - fun:_ZN2v88internal6Object11GetPropertyEPS1_PNS0_12LookupResultEPNS0_6StringEP18PropertyAttributes - fun:_ZN2v88internal6Object11GetPropertyENS0_6HandleIS1_EES3_PNS0_12LookupResultENS2_INS0_6StringEEEP18PropertyAttributes - fun:_ZN2v88internal6LoadIC4LoadENS0_16InlineCacheStateENS0_6HandleINS0_6ObjectEEENS3_INS0_6StringEEE - fun:_ZN2v88internal11LoadIC_MissENS0_9ArgumentsEPNS0_7IsolateE - obj:* - obj:* - obj:* - obj:* - fun:_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb - fun:_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb - fun:_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE - fun:_ZN7WebCore7V8Proxy24instrumentedCallFunctionEPNS_5FrameEN2v86HandleINS3_8FunctionEEENS4_INS3_6ObjectEEEiPNS4_INS3_5ValueEEE - fun:_ZN7WebCore7V8Proxy12callFunctionEN2v86HandleINS1_8FunctionEEENS2_INS1_6ObjectEEEiPNS2_INS1_5ValueEEE - fun:_ZN7WebCore19V8LazyEventListener20callListenerFunctionEPNS_22ScriptExecutionContextEN2v86HandleINS3_5ValueEEEPNS_5EventE - fun:_ZN7WebCore23V8AbstractEventListener18invokeEventHandlerEPNS_22ScriptExecutionContextEPNS_5EventEN2v86HandleINS5_5ValueEEE - fun:_ZN7WebCore23V8AbstractEventListener11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE - fun:_ZN7WebCore11EventTarget18fireEventListenersEPNS_5EventEPNS_15EventTargetDataERN3WTF6VectorINS_23RegisteredEventListenerELm1EEE -} -{ - bug_127499_a - Memcheck:Uninitialized - ... - fun:VDADecoderCreate - fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_127499_b - Memcheck:Leak - ... - fun:VDADecoderCreate - fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_127499_c - Memcheck:Free - ... - fun:VTDecompressionSessionInvalidate - fun:VDADecoderDestroy - fun:_ZN3gfx30VideoDecodeAccelerationSupport7DestroyEv - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_127499_d - Memcheck:Uninitialized - ... - fun:VTDecompressionSessionInvalidate - fun:VDADecoderDestroy - fun:_ZN3gfx30VideoDecodeAccelerationSupport7DestroyEv - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_127499_e - Memcheck:Leak - fun:_Znw* - fun:_ZN4base17LoadNativeLibraryE* - fun:_ZN12_GLOBAL__N_117InitializeVdaApisEv - fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_127499_f - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFBasicHashCreate - fun:__CFDictionaryCreateGeneric - fun:CFDictionaryCreate - fun:-[__NSPlaceholderDictionary initWithObjects:forKeys:count:] - fun:+[NSDictionary dictionaryWithObjectsAndKeys:] - fun:_ZN3gfx30VideoDecodeAccelerationSupport6CreateEiiiPKvm - fun:_ZN3gfx46VideoDecodeAccelerationSupportTest_Create_Test8TestBodyEv -} -{ - bug_131361 - Memcheck:Overlap - fun:memcpy - ... - fun:_ZN2v88internal18GvnBasicBlockState32* -} -{ - bug_139633 - Memcheck:Uninitialized - fun:_ZL19ConvertYUVToRGB32_ChhhPh - fun:LinearScaleYUVToRGB32RowWithRange_C - fun:_ZN5media23ScaleYUVToRGB32WithRectEPKhS1_S1_Phiiiiiiiiiii - fun:_ZN8remoting29ConvertAndScaleYUVToRGB32RectEPKhS1_S1_iiRK7SkTSizeIiERK7SkIRectPhiS5_S8_S8_ - fun:_ZN8remoting10DecoderVp811RenderFrameERK7SkTSizeIiERK7SkIRectPhiP8SkRegion - fun:_ZN8remoting13DecoderTester11RenderFrameEv - fun:_ZN8remoting13DecoderTester14ReceivedPacketEPNS_11VideoPacketE - fun:_ZN8remoting13DecoderTester20ReceivedScopedPacketE10scoped_ptrINS_11VideoPacketEE -} -{ - bug_148865 - Memcheck:Leak - fun:_Znw* - fun:_ZN7content16RenderThreadImpl4InitEv - fun:_ZN7content16RenderThreadImplC2ERKSs - fun:_ZN7content16RenderThreadImplC1ERKSs - fun:_ZN7content21WebRTCAudioDeviceTest5SetUpEv -} -{ - bug_159190 - Memcheck:Uninitialized - ... - fun:_ZNK19TConcreteFontScaler15CopyGlyphBitmapEtjP6CGRectPm - ... - fun:_ZN9Offscreen5getCGERK19SkScalerContext_MacRK7SkGlyphtPmb - fun:_ZN19SkScalerContext_Mac13generateImageERK7SkGlyph -} -{ - bug_171722_mac - Memcheck:Leak - fun:_Znw* - fun:_ZN3net12_GLOBAL__N_120URLRequestFtpJobTest9AddSocketEPNS_13MockReadWriteILNS_17MockReadWriteTypeE0EEEmPNS2_ILS3_1EEEm - ... -} -{ - bug_173779 - Memcheck:Uninitialized - ... - fun:img_data_lock - fun:CGSImageDataLock - fun:ripc_AcquireImage - fun:ripc_DrawImage* - fun:CGContextDrawImage* - ... - fun:_ZN11CUIRenderer4DrawE6CGRectP9CGContextPK14__CFDictionaryPS5_ -} -{ - bug_177540 - Memcheck:Uninitialized - fun:_ZN3WTF20TCMalloc_ThreadCache10DeallocateENS_11HardenedSLLEm -} -{ - bug_231969 - Memcheck:Uninitialized - fun:rangematch - fun:fnmatch1 - fun:fnmatch1 - fun:fnmatch$UNIX2003 - fun:_ZN4base14FileEnumerator4NextEv - fun:_ZN10disk_cache15SimpleIndexFile15RestoreFromDiskERKN4base8FilePathE -} -{ - bug_244420 - Memcheck:Uninitialized - ... - fun:_ZN9talk_baseL8ToStringIyEESsRKT_ - fun:_ZN7content23VideoDestinationHandler4OpenEPNS_28MediaStreamDependencyFactoryEPNS_28MediaStreamRegistryInterfaceERKSsPPNS_20FrameWriterInterfaceE - fun:_ZN7content37VideoDestinationHandlerTest_Open_Test8TestBodyEv -} -{ - bug_244437 - Memcheck:Uninitialized - fun:_ZN5mediaL23FromInterleavedInternalIssLs0EEEvPKviiPNS_8AudioBusEff - fun:_ZN5media8AudioBus22FromInterleavedPartialEPKviii - fun:_ZN5media8AudioBus15FromInterleavedEPKvii - fun:_ZN7content19WebRtcAudioRenderer14SourceCallbackEiPN5media8AudioBusE -} -{ - bug_246567 - Memcheck:Leak - fun:_Znw* - fun:_ZN2v88internal24PerThreadAssertScopeBase10AssertDataEv - fun:_ZN2v88internal20PerThreadAssertScopeILNS0_19PerThreadAssertTypeE1ELb1EE9IsAllowedEv - ... - fun:_ZN3net15ProxyResolverV87Context6InitV8ERK13scoped_refptrINS_23ProxyResolverScriptDataEE - fun:_ZN3net15ProxyResolverV812SetPacScriptERK13scoped_refptrINS_23ProxyResolverScriptDataEERKN4base8CallbackIFviEEE - fun:_ZN3net22ProxyResolverV8Tracing3Job20ExecuteProxyResolverEv - fun:_ZN3net22ProxyResolverV8Tracing3Job15ExecuteBlockingEv -} -{ - bug_246567b - Memcheck:Leak - fun:_Znw* - fun:_ZN2v88internal24PerThreadAssertScopeBase10AssertDataEv - fun:_ZN2v88internal20PerThreadAssertScopeILNS0_19PerThreadAssertTypeE1ELb1EE9IsAllowedEv - fun:_ZN2v88internal11HandleScope12CreateHandleINS0* - fun:_ZN2v88internal6Handle* -} -# Maybe related to bug_105527_a? -{ - bug_247506a - Memcheck:Leak - fun:_Znw* - fun:_ZN16TCFStringUniquer19CreateStringUniquerEv - fun:pthread_once - fun:_ZN16TCFStringUniquerC1Ev - fun:_ZN19TCFResurrectContext17ResurrectCFStringEv - fun:_ZN19TCFResurrectContext9ResurrectEv - fun:_ZN19TCFResurrectContext21ResurrectCFDictionaryEv - fun:_ZN19TCFResurrectContext9ResurrectEv - fun:_ZNK22TGlobalFontRegistryImp20RendezvousWithServerEv - fun:_ZN22TGlobalFontRegistryImpC2Ev - fun:_ZN19TGlobalFontRegistry14CreateRegistryEv -} -# Maybe related to bug_105527_b ? -{ - bug_247506b - Memcheck:Leak - fun:_Znw* - fun:_ZN18TLocalFontRegistry14CreateRegistryEv - fun:pthread_once - fun:_ZN18TLocalFontRegistryC2Ev - fun:XTCopyFontWithName - fun:_ZNK17TDescriptorSource35CopyFontDescriptorPerPostscriptNameEPK10__CFStringm - fun:_ZNK11TDescriptor32CreateMatchingDescriptorInternalEPK7__CFSet - fun:_ZN11TDescriptor12InitBaseFontEv -} -# Maybe related to bug_105342 ? -{ - bug_247506c - Memcheck:Leak - fun:_Znw* - fun:_ZN15TSessionManager20CreateSessionManagerEv - fun:pthread_once - fun:_ZN15TSessionManagerC1Ev - fun:_ZNK22TGlobalFontRegistryImp13GetServerPortEv - fun:_ZNK22TGlobalFontRegistryImp20RendezvousWithServerEv - fun:_ZN22TGlobalFontRegistryImpC2Ev - fun:_ZN19TGlobalFontRegistry14CreateRegistryEv - fun:pthread_once - fun:_ZN19TGlobalFontRegistryC2Ev - fun:XTCopyFontWithName -} -{ - bug_247506d - Memcheck:Leak - fun:malloc_zone_calloc - fun:_calloc_internal - fun:_cache_malloc - fun:_cache_fill - fun:lookUpMethod - fun:_class_lookupMethodAndLoadCache - fun:objc_msgSend - ... - fun:_ZL17SetupMenuTrackingR14MenuSelectDatah5PointdP8MenuDatamtPK4RectS6_jS6_PK10__CFString - fun:_ZL19PopUpMenuSelectCoreP8MenuData5PointdS1_tjPK4RecttmS4_S4_PK10__CFStringPP13OpaqueMenuRefPt - fun:_HandlePopUpMenuSelection7 -} -{ - bug_247506e - Memcheck:Leak - fun:calloc - fun:_ZN11TMemoryHeap6CallocEmm - fun:_Z14AllocateMemorymP11TMemoryHeapb - fun:_Z13CacheAllocatemb - fun:_Z16BuildMacEncTablev - fun:_ZN15TParsingContext13GetParseProcsEv - fun:_ZN19TSFNTParsingContext13GetParseProcsEv - fun:_ZN18TCIDParsingContext13GetParseProcsEv - fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt -} -{ - bug_247506f - Memcheck:Leak - fun:malloc_zone_calloc - fun:_calloc_internal - fun:_objc_insertMethods - fun:_objc_read_categories_from_image - fun:_read_images - fun:map_images_nolock - fun:map_images - fun:_ZN4dyldL18notifyBatchPartialE17dyld_image_statesbPFPKcS0_jPK15dyld_image_infoE - fun:_ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE - fun:_ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE -} -{ - bug_247506g - Memcheck:Leak - fun:malloc_zone_malloc - fun:malloc_set_zone_name - fun:malloc_default_purgeable_zone - fun:ImageIO_Malloc - fun:copyImageBlockSetPNG - fun:ImageProviderCopyImageBlockSetCallback - fun:CGImageProviderCopyImageBlockSet - fun:img_blocks_create - fun:img_blocks_extent - fun:img_data_lock - fun:CGSImageDataLock - fun:ripc_AcquireImage - fun:ripc_DrawImage - fun:CGContextDrawImage - fun:__-[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:]_block_invoke_1 - fun:-[NSImageRep drawInRect:fromRect:operation:fraction:respectFlipped:hints:] - fun:_ZN12_GLOBAL__N_129NSImageOrNSImageRepToSkBitmapEP7NSImageP10NSImageRep7_NSSizeb - fun:_ZN3gfx20NSImageRepToSkBitmapEP10NSImageRep7_NSSizeb - fun:_ZN3gfx27ImageSkiaFromResizedNSImageEP7NSImage7_NSSize - fun:_ZN3gfx20ImageSkiaFromNSImageEP7NSImage - fun:_ZNK3gfx5Image11ToImageSkiaEv - fun:_ZNK3gfx5Image10ToSkBitmapEv -} -{ - bug_247506h - Memcheck:Leak - fun:malloc - fun:_ZN11TMemoryHeap6MallocEm - fun:_Z14AllocateMemorymP11TMemoryHeapb - fun:_Z13GetGrowBufferm - fun:_ZN31TFractionalMetricsRenderContextC2EPK10TType1FontPKht - fun:_ZNK10TType1Font13GetRawMetricsERK18TType1FontInstancePKhtR10_t_CharSBW - fun:_ZNK10TType1Font23RenderFractionalMetricsERK15TType1TransformtPKhtR22GlyphFractionalMetrics - fun:_ZNK13TType1CIDFont20GetFractionalMetricsERK15TType1TransformtP22GlyphFractionalMetrics - fun:_ZNK12TType1Strike10GetMetricsERK21TRenderingDescriptionmPKtRK19TDestinationMapping - fun:_Z20Type1GetGlyphMetricsmPK18TStrikeDescriptionPK21TRenderingDescriptionmPKtPvm - fun:_ZNK19TConcreteFontScaler25GetGlyphIdealAdvanceWidthEt -} -{ - bug_247506i - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:CFBasicHashCreate - fun:__CFDictionaryCreateGeneric - fun:CFDictionaryCreateMutable - fun:utDeactivateAllSelectedIMInDoc - fun:MyDeactivateTSMDocument - fun:_ReactivateTSMDocumentAfterMenuTracking -} -{ - bug_247506j - Memcheck:Leak - fun:malloc_zone_calloc - fun:ripr_Rectangles - fun:ripc_DrawRects - fun:CGContextFillRects - fun:NSRectFillListWithColorsUsingOperation - fun:NSDrawColorTiledRects -} -{ - bug_247506k - Memcheck:Leak - fun:malloc - fun:_ZN11TMemoryHeap6MallocEm - fun:_Z24Type1InterpretCharStringP11_t_FontInstP10_t_BCProcsP17_t_T1CharDataDescP9_t_CharIOP9_t_RunRecP12_t_PathProcsP6T1Args - fun:_ZL14ATMCharOutlineP11_t_FontInstP10_t_BCProcsPvP9_t_CharIOP12_t_PathProcsmS3_ - fun:_ZN21MPathRenderingContext13RenderOutlineERK11_t_FontInstb - fun:_ZN28TPathMetricsRenderingContext11MakeOutlineERK11_t_FontInstbR10FixedPointS4_S4_ - fun:_ZNK10TType1Font20RenderOutlineMetricsERK15TType1TransformtPKhtR21GlyphRenderingMetrics - fun:_ZNK13TType1CIDFont17GetOutlineMetricsERK15TType1TransformtP21GlyphRenderingMetrics - fun:_ZNK12TType1Strike10GetMetricsERK21TRenderingDescriptionmPKtRK19TDestinationMapping - fun:_Z20Type1GetGlyphMetricsmPK18TStrikeDescriptionPK21TRenderingDescriptionmPKtPvm - fun:_ZNK19TConcreteFontScaler19GetGlyphIdealBoundsEt - fun:FPFontGetGlyphIdealBounds -} -{ - bug_257501 - Memcheck:Uninitialized - fun:rangematch - fun:fnmatch1 - fun:fnmatch1 - fun:fnmatch$UNIX2003 - fun:_ZN4base14FileEnumerator4NextEv - fun:_ZN10disk_cache15SimpleIndexFile19SyncRestoreFromDiskERKN4base8FilePathE - fun:_ZN10disk_cache15SimpleIndexFile20SyncLoadIndexEntriesERKN4base8FilePathE13scoped_refptrINS1_22SingleThreadTaskRunnerEERKNS1_8CallbackIFv10scoped_ptrIN9__gnu_cxx8hash_mapIyNS_13EntryMetadataENSA_4hashIyEESt8equal_toIyESaISC_EEENS1_14DefaultDeleterISI_EEEbEEE -} -{ - bug_280583 - Memcheck:Unaddressable - ... - fun:_ZN6libyuv21ScaleARGBBilinearDownEiiiiiPKhPhiiii - fun:_ZN6libyuv16ScaleARGBAnySizeEiiiiiiiiPKhPhiiiiNS_10FilterModeE - fun:_ZN6libyuv9ScaleARGBEPKhiiiPhiiiiiiiNS_10FilterModeE - fun:ARGBScale - fun:_ZN7content20DesktopCaptureDevice4Core18OnCaptureCompletedEPN6webrtc12DesktopFrameE - fun:_ZN6webrtc12_GLOBAL__N_117ScreenCapturerMac7CaptureERKNS_13DesktopRegionE - fun:_ZN7content20DesktopCaptureDevice4Core9DoCaptureEv -} -{ - bug_292913_a - Memcheck:Leak - fun:malloc_zone_malloc - fun:_CFRuntimeCreateInstance - fun:_ZN7TCFBaseI11TDescriptorEnwEm - fun:_ZNK17TDescriptorSource14CopyDescriptorEPK7__CFURL - fun:_ZNK17TDescriptorSource32CopySystemWideFallbackDescriptorEP6CGFontPKtl - fun:_ZNK17TDescriptorSource32CopySystemWideFallbackDescriptorEP6CGFontPK10__CFString7CFRange - fun:_ZNK12TFontCascade24CreateSystemWideFallbackEPK8__CTFontPK10__CFString7CFRange - fun:_ZNK12TFontCascade14CreateFallbackEPK8__CTFontPK10__CFString7CFRange - ... - fun:_ZN3gfx13RenderTextMac12EnsureLayoutEv -} -{ - bug_292913_b - Memcheck:Uninitialized - fun:_ZL10AddEncHashP12EncHashTablePKhij - fun:_Z16BuildMacEncTablev - fun:_ZN15TParsingContext13GetParseProcsEv - fun:_ZN19TSFNTParsingContext13GetParseProcsEv - fun:_ZN18TCIDParsingContext13GetParseProcsEv - fun:_ZN16TType1OTFCIDFont20ParseCFFCIDFontDictsERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContextRVt - fun:_ZN16TType1OTFCIDFont15ParseCFFCIDFontERK19TType1CFFDescriptorP32Type1ProtectionEvaluationContext - fun:_ZN16TType1OTFCIDFontC2ERK19TType1CFFDescriptor - fun:_ZN10TType1Font7GetFontEPK5TFont -} -{ - bug_310761_a - Memcheck:Leak - fun:malloc - fun:_NPN_Get*Identifier - fun:_ZN5blink11WebBindings*get*Identifier* -} -{ - bug_310761_b - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN7WebCore*TerminatedArrayBuilder* - fun:_ZN7WebCore7RuleSet19compactPendingRules* -} -{ - bug_320918 - Memcheck:Leak - fun:malloc - fun:_ZN3WTF10fastMallocEm - fun:_ZN3WTF11LinkedStackIN7WebCore8RuleDataEEnwEm - fun:_ZN7WebCore7RuleSet12addToRuleSet* - fun:_ZN7WebCore7RuleSet21findBestRuleSetAndAdd* - fun:_ZN7WebCore7RuleSet7addRule* - fun:_ZN7WebCore7RuleSet13addChildRules* - fun:_ZN7WebCore7RuleSet17addRulesFromSheet* - fun:_ZN7WebCore21CSSDefaultStyleSheets16loadDefaultStyle* -} diff --git a/chromium/tools/valgrind/memcheck_analyze.py b/chromium/tools/valgrind/memcheck_analyze.py deleted file mode 100755 index 0b011296a3c..00000000000 --- a/chromium/tools/valgrind/memcheck_analyze.py +++ /dev/null @@ -1,634 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# memcheck_analyze.py - -''' Given a valgrind XML file, parses errors and uniques them.''' - -import gdb_helper - -from collections import defaultdict -import hashlib -import logging -import optparse -import os -import re -import subprocess -import sys -import time -from xml.dom.minidom import parse -from xml.parsers.expat import ExpatError - -import common - -# Global symbol table (yuck) -TheAddressTable = None - -# These are regexps that define functions (using C++ mangled names) -# we don't want to see in stack traces while pretty printing -# or generating suppressions. -# Just stop printing the stack/suppression frames when the current one -# matches any of these. -_BORING_CALLERS = common.BoringCallers(mangled=True, use_re_wildcards=True) - -def getTextOf(top_node, name): - ''' Returns all text in all DOM nodes with a certain |name| that are children - of |top_node|. - ''' - - text = "" - for nodes_named in top_node.getElementsByTagName(name): - text += "".join([node.data for node in nodes_named.childNodes - if node.nodeType == node.TEXT_NODE]) - return text - -def getCDATAOf(top_node, name): - ''' Returns all CDATA in all DOM nodes with a certain |name| that are children - of |top_node|. - ''' - - text = "" - for nodes_named in top_node.getElementsByTagName(name): - text += "".join([node.data for node in nodes_named.childNodes - if node.nodeType == node.CDATA_SECTION_NODE]) - if (text == ""): - return None - return text - -def shortenFilePath(source_dir, directory): - '''Returns a string with the string prefix |source_dir| removed from - |directory|.''' - prefixes_to_cut = ["build/src/", "valgrind/coregrind/", "out/Release/../../"] - - if source_dir: - prefixes_to_cut.append(source_dir) - - for p in prefixes_to_cut: - index = directory.rfind(p) - if index != -1: - directory = directory[index + len(p):] - - return directory - -# Constants that give real names to the abbreviations in valgrind XML output. -INSTRUCTION_POINTER = "ip" -OBJECT_FILE = "obj" -FUNCTION_NAME = "fn" -SRC_FILE_DIR = "dir" -SRC_FILE_NAME = "file" -SRC_LINE = "line" - -def gatherFrames(node, source_dir): - frames = [] - for frame in node.getElementsByTagName("frame"): - frame_dict = { - INSTRUCTION_POINTER : getTextOf(frame, INSTRUCTION_POINTER), - OBJECT_FILE : getTextOf(frame, OBJECT_FILE), - FUNCTION_NAME : getTextOf(frame, FUNCTION_NAME), - SRC_FILE_DIR : shortenFilePath( - source_dir, getTextOf(frame, SRC_FILE_DIR)), - SRC_FILE_NAME : getTextOf(frame, SRC_FILE_NAME), - SRC_LINE : getTextOf(frame, SRC_LINE) - } - - # Ignore this frame and all the following if it's a "boring" function. - enough_frames = False - for regexp in _BORING_CALLERS: - if re.match("^%s$" % regexp, frame_dict[FUNCTION_NAME]): - enough_frames = True - break - if enough_frames: - break - - frames += [frame_dict] - - global TheAddressTable - if TheAddressTable != None and frame_dict[SRC_LINE] == "": - # Try using gdb - TheAddressTable.Add(frame_dict[OBJECT_FILE], - frame_dict[INSTRUCTION_POINTER]) - return frames - -class ValgrindError: - ''' Takes a node and reads all the data from it. A - ValgrindError is immutable and is hashed on its pretty printed output. - ''' - - def __init__(self, source_dir, error_node, commandline, testcase): - ''' Copies all the relevant information out of the DOM and into object - properties. - - Args: - error_node: The DOM node we're extracting from. - source_dir: Prefix that should be stripped from the node. - commandline: The command that was run under valgrind - testcase: The test case name, if known. - ''' - - # Valgrind errors contain one pair, plus an optional - # pair, plus an optional , - # plus (since 3.5.0) a pair. - # (Origin is nicely enclosed; too bad the other two aren't.) - # The most common way to see all three in one report is - # a syscall with a parameter that points to uninitialized memory, e.g. - # Format: - # - # 0x6d - # 1 - # SyscallParam - # Syscall param write(buf) points to uninitialised byte(s) - # - # - # ... - # - # - # Address 0x5c9af4f is 7 bytes inside a block of ... - # - # - # ... - # - # - # - # Uninitialised value was created by a heap allocation - # - # - # ... - # - # - # - # - # insert_a_suppression_name_here - # Memcheck:Param - # write(buf) - # __write_nocancel - # ... - # main - # - # - # Memcheck:Param - # write(buf) - # fun:__write_nocancel - # ... - # fun:main - # } - # ]]> - # - # - # - # - # Each frame looks like this: - # - # 0x83751BC - # /data/dkegel/chrome-build/src/out/Release/base_unittests - # _ZN7testing8internal12TestInfoImpl7RunTestEPNS_8TestInfoE - # /data/dkegel/chrome-build/src/testing/gtest/src - # gtest-internal-inl.h - # 655 - # - # although the dir, file, and line elements are missing if there is - # no debug info. - - self._kind = getTextOf(error_node, "kind") - self._backtraces = [] - self._suppression = None - self._commandline = commandline - self._testcase = testcase - self._additional = [] - - # Iterate through the nodes, parsing pairs. - description = None - for node in error_node.childNodes: - if node.localName == "what" or node.localName == "auxwhat": - description = "".join([n.data for n in node.childNodes - if n.nodeType == n.TEXT_NODE]) - elif node.localName == "xwhat": - description = getTextOf(node, "text") - elif node.localName == "stack": - assert description - self._backtraces.append([description, gatherFrames(node, source_dir)]) - description = None - elif node.localName == "origin": - description = getTextOf(node, "what") - stack = node.getElementsByTagName("stack")[0] - frames = gatherFrames(stack, source_dir) - self._backtraces.append([description, frames]) - description = None - stack = None - frames = None - elif description and node.localName != None: - # The lastest description has no stack, e.g. "Address 0x28 is unknown" - self._additional.append(description) - description = None - - if node.localName == "suppression": - self._suppression = getCDATAOf(node, "rawtext"); - - def __str__(self): - ''' Pretty print the type and backtrace(s) of this specific error, - including suppression (which is just a mangled backtrace).''' - output = "" - if (self._commandline): - output += self._commandline + "\n" - - output += self._kind + "\n" - for backtrace in self._backtraces: - output += backtrace[0] + "\n" - filter = subprocess.Popen("c++filt -n", stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - shell=True, - close_fds=True) - buf = "" - for frame in backtrace[1]: - buf += (frame[FUNCTION_NAME] or frame[INSTRUCTION_POINTER]) + "\n" - (stdoutbuf, stderrbuf) = filter.communicate(buf.encode('latin-1')) - demangled_names = stdoutbuf.split("\n") - - i = 0 - for frame in backtrace[1]: - output += (" " + demangled_names[i]) - i = i + 1 - - global TheAddressTable - if TheAddressTable != None and frame[SRC_FILE_DIR] == "": - # Try using gdb - foo = TheAddressTable.GetFileLine(frame[OBJECT_FILE], - frame[INSTRUCTION_POINTER]) - if foo[0] != None: - output += (" (" + foo[0] + ":" + foo[1] + ")") - elif frame[SRC_FILE_DIR] != "": - output += (" (" + frame[SRC_FILE_DIR] + "/" + frame[SRC_FILE_NAME] + - ":" + frame[SRC_LINE] + ")") - else: - output += " (" + frame[OBJECT_FILE] + ")" - output += "\n" - - for additional in self._additional: - output += additional + "\n" - - assert self._suppression != None, "Your Valgrind doesn't generate " \ - "suppressions - is it too old?" - - if self._testcase: - output += "The report came from the `%s` test.\n" % self._testcase - output += "Suppression (error hash=#%016X#):\n" % self.ErrorHash() - output += (" For more info on using suppressions see " - "http://dev.chromium.org/developers/tree-sheriffs/sheriff-details-chromium/memory-sheriff#TOC-Suppressing-memory-reports") - - # Widen suppression slightly to make portable between mac and linux - # TODO(timurrrr): Oops, these transformations should happen - # BEFORE calculating the hash! - supp = self._suppression; - supp = supp.replace("fun:_Znwj", "fun:_Znw*") - supp = supp.replace("fun:_Znwm", "fun:_Znw*") - supp = supp.replace("fun:_Znaj", "fun:_Zna*") - supp = supp.replace("fun:_Znam", "fun:_Zna*") - - # Make suppressions even less platform-dependent. - for sz in [1, 2, 4, 8]: - supp = supp.replace("Memcheck:Addr%d" % sz, "Memcheck:Unaddressable") - supp = supp.replace("Memcheck:Value%d" % sz, "Memcheck:Uninitialized") - supp = supp.replace("Memcheck:Cond", "Memcheck:Uninitialized") - - # Split into lines so we can enforce length limits - supplines = supp.split("\n") - supp = None # to avoid re-use - - # Truncate at line 26 (VG_MAX_SUPP_CALLERS plus 2 for name and type) - # or at the first 'boring' caller. - # (https://bugs.kde.org/show_bug.cgi?id=199468 proposes raising - # VG_MAX_SUPP_CALLERS, but we're probably fine with it as is.) - newlen = min(26, len(supplines)); - - # Drop boring frames and all the following. - enough_frames = False - for frameno in range(newlen): - for boring_caller in _BORING_CALLERS: - if re.match("^ +fun:%s$" % boring_caller, supplines[frameno]): - newlen = frameno - enough_frames = True - break - if enough_frames: - break - if (len(supplines) > newlen): - supplines = supplines[0:newlen] - supplines.append("}") - - for frame in range(len(supplines)): - # Replace the always-changing anonymous namespace prefix with "*". - m = re.match("( +fun:)_ZN.*_GLOBAL__N_.*\.cc_" + - "[0-9a-fA-F]{8}_[0-9a-fA-F]{8}(.*)", - supplines[frame]) - if m: - supplines[frame] = "*".join(m.groups()) - - output += "\n".join(supplines) + "\n" - - return output - - def UniqueString(self): - ''' String to use for object identity. Don't print this, use str(obj) - instead.''' - rep = self._kind + " " - for backtrace in self._backtraces: - for frame in backtrace[1]: - rep += frame[FUNCTION_NAME] - - if frame[SRC_FILE_DIR] != "": - rep += frame[SRC_FILE_DIR] + "/" + frame[SRC_FILE_NAME] - else: - rep += frame[OBJECT_FILE] - - return rep - - # This is a device-independent hash identifying the suppression. - # By printing out this hash we can find duplicate reports between tests and - # different shards running on multiple buildbots - def ErrorHash(self): - return int(hashlib.md5(self.UniqueString()).hexdigest()[:16], 16) - - def __hash__(self): - return hash(self.UniqueString()) - def __eq__(self, rhs): - return self.UniqueString() == rhs - -def log_is_finished(f, force_finish): - f.seek(0) - prev_line = "" - while True: - line = f.readline() - if line == "": - if not force_finish: - return False - # Okay, the log is not finished but we can make it up to be parseable: - if prev_line.strip() in ["", "", ""]: - f.write("\n") - return True - return False - if '' in line: - # Valgrind often has garbage after upon crash. - f.truncate() - return True - prev_line = line - -class MemcheckAnalyzer: - ''' Given a set of Valgrind XML files, parse all the errors out of them, - unique them and output the results.''' - - SANITY_TEST_SUPPRESSIONS = { - "Memcheck sanity test 01 (memory leak).": 1, - "Memcheck sanity test 02 (malloc/read left).": 1, - "Memcheck sanity test 03 (malloc/read right).": 1, - "Memcheck sanity test 04 (malloc/write left).": 1, - "Memcheck sanity test 05 (malloc/write right).": 1, - "Memcheck sanity test 06 (new/read left).": 1, - "Memcheck sanity test 07 (new/read right).": 1, - "Memcheck sanity test 08 (new/write left).": 1, - "Memcheck sanity test 09 (new/write right).": 1, - "Memcheck sanity test 10 (write after free).": 1, - "Memcheck sanity test 11 (write after delete).": 1, - "Memcheck sanity test 12 (array deleted without []).": 1, - "Memcheck sanity test 13 (single element deleted with []).": 1, - "Memcheck sanity test 14 (malloc/read uninit).": 1, - "Memcheck sanity test 15 (new/read uninit).": 1, - } - - # Max time to wait for memcheck logs to complete. - LOG_COMPLETION_TIMEOUT = 180.0 - - def __init__(self, source_dir, show_all_leaks=False, use_gdb=False): - '''Create a parser for Memcheck logs. - - Args: - source_dir: Path to top of source tree for this build - show_all_leaks: Whether to show even less important leaks - use_gdb: Whether to use gdb to resolve source filenames and line numbers - in the report stacktraces - ''' - self._source_dir = source_dir - self._show_all_leaks = show_all_leaks - self._use_gdb = use_gdb - - # Contains the set of unique errors - self._errors = set() - - # Contains the time when the we started analyzing the first log file. - # This variable is used to skip incomplete logs after some timeout. - self._analyze_start_time = None - - - def Report(self, files, testcase, check_sanity=False): - '''Reads in a set of files and prints Memcheck report. - - Args: - files: A list of filenames. - check_sanity: if true, search for SANITY_TEST_SUPPRESSIONS - ''' - # Beyond the detailed errors parsed by ValgrindError above, - # the xml file contain records describing suppressions that were used: - # - # - # 28 - # pango_font_leak_todo - # - # - # 378 - # bug_13243 - # - # /usr/lib/libgcc_s.1.dylib0x27000 - # giving the filename and load address of each binary that was mapped - # into the process. - - global TheAddressTable - if self._use_gdb: - TheAddressTable = gdb_helper.AddressTable() - else: - TheAddressTable = None - cur_report_errors = set() - suppcounts = defaultdict(int) - badfiles = set() - - if self._analyze_start_time == None: - self._analyze_start_time = time.time() - start_time = self._analyze_start_time - - parse_failed = False - for file in files: - # Wait up to three minutes for valgrind to finish writing all files, - # but after that, just skip incomplete files and warn. - f = open(file, "r+") - pid = re.match(".*\.([0-9]+)$", file) - if pid: - pid = pid.groups()[0] - found = False - running = True - firstrun = True - skip = False - origsize = os.path.getsize(file) - while (running and not found and not skip and - (firstrun or - ((time.time() - start_time) < self.LOG_COMPLETION_TIMEOUT))): - firstrun = False - f.seek(0) - if pid: - # Make sure the process is still running so we don't wait for - # 3 minutes if it was killed. See http://crbug.com/17453 - ps_out = subprocess.Popen("ps p %s" % pid, shell=True, - stdout=subprocess.PIPE).stdout - if len(ps_out.readlines()) < 2: - running = False - else: - skip = True - running = False - found = log_is_finished(f, False) - if not running and not found: - logging.warn("Valgrind process PID = %s is not running but its " - "XML log has not been finished correctly.\n" - "Make it up by adding some closing tags manually." % pid) - found = log_is_finished(f, not running) - if running and not found: - time.sleep(1) - f.close() - if not found: - badfiles.add(file) - else: - newsize = os.path.getsize(file) - if origsize > newsize+1: - logging.warn(str(origsize - newsize) + - " bytes of junk were after in %s!" % - file) - try: - parsed_file = parse(file); - except ExpatError, e: - parse_failed = True - logging.warn("could not parse %s: %s" % (file, e)) - lineno = e.lineno - 1 - context_lines = 5 - context_start = max(0, lineno - context_lines) - context_end = lineno + context_lines + 1 - context_file = open(file, "r") - for i in range(0, context_start): - context_file.readline() - for i in range(context_start, context_end): - context_data = context_file.readline().rstrip() - if i != lineno: - logging.warn(" %s" % context_data) - else: - logging.warn("> %s" % context_data) - context_file.close() - continue - if TheAddressTable != None: - load_objs = parsed_file.getElementsByTagName("load_obj") - for load_obj in load_objs: - obj = getTextOf(load_obj, "obj") - ip = getTextOf(load_obj, "ip") - TheAddressTable.AddBinaryAt(obj, ip) - - commandline = None - preamble = parsed_file.getElementsByTagName("preamble")[0]; - for node in preamble.getElementsByTagName("line"): - if node.localName == "line": - for x in node.childNodes: - if x.nodeType == node.TEXT_NODE and "Command" in x.data: - commandline = x.data - break - - raw_errors = parsed_file.getElementsByTagName("error") - for raw_error in raw_errors: - # Ignore "possible" leaks for now by default. - if (self._show_all_leaks or - getTextOf(raw_error, "kind") != "Leak_PossiblyLost"): - error = ValgrindError(self._source_dir, - raw_error, commandline, testcase) - if error not in cur_report_errors: - # We haven't seen such errors doing this report yet... - if error in self._errors: - # ... but we saw it in earlier reports, e.g. previous UI test - cur_report_errors.add("This error was already printed in " - "some other test, see 'hash=#%016X#'" % \ - error.ErrorHash()) - else: - # ... and we haven't seen it in other tests as well - self._errors.add(error) - cur_report_errors.add(error) - - suppcountlist = parsed_file.getElementsByTagName("suppcounts") - if len(suppcountlist) > 0: - suppcountlist = suppcountlist[0] - for node in suppcountlist.getElementsByTagName("pair"): - count = getTextOf(node, "count"); - name = getTextOf(node, "name"); - suppcounts[name] += int(count) - - if len(badfiles) > 0: - logging.warn("valgrind didn't finish writing %d files?!" % len(badfiles)) - for file in badfiles: - logging.warn("Last 20 lines of %s :" % file) - os.system("tail -n 20 '%s' 1>&2" % file) - - if parse_failed: - logging.error("FAIL! Couldn't parse Valgrind output file") - return -2 - - common.PrintUsedSuppressionsList(suppcounts) - - retcode = 0 - if cur_report_errors: - logging.error("FAIL! There were %s errors: " % len(cur_report_errors)) - - if TheAddressTable != None: - TheAddressTable.ResolveAll() - - for error in cur_report_errors: - logging.error(error) - - retcode = -1 - - # Report tool's insanity even if there were errors. - if check_sanity: - remaining_sanity_supp = MemcheckAnalyzer.SANITY_TEST_SUPPRESSIONS - for (name, count) in suppcounts.iteritems(): - if (name in remaining_sanity_supp and - remaining_sanity_supp[name] == count): - del remaining_sanity_supp[name] - if remaining_sanity_supp: - logging.error("FAIL! Sanity check failed!") - logging.info("The following test errors were not handled: ") - for (name, count) in remaining_sanity_supp.iteritems(): - logging.info(" * %dx %s" % (count, name)) - retcode = -3 - - if retcode != 0: - return retcode - - logging.info("PASS! No errors found!") - return 0 - - -def _main(): - '''For testing only. The MemcheckAnalyzer class should be imported instead.''' - parser = optparse.OptionParser("usage: %prog [options] ") - parser.add_option("", "--source-dir", - help="path to top of source tree for this build" - "(used to normalize source paths in baseline)") - - (options, args) = parser.parse_args() - if len(args) == 0: - parser.error("no filename specified") - filenames = args - - analyzer = MemcheckAnalyzer(options.source_dir, use_gdb=True) - return analyzer.Report(filenames, None) - - -if __name__ == "__main__": - sys.exit(_main()) diff --git a/chromium/tools/valgrind/regrind.sh b/chromium/tools/valgrind/regrind.sh deleted file mode 100755 index 0f90ba737f0..00000000000 --- a/chromium/tools/valgrind/regrind.sh +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/sh -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Scape errors from the valgrind bots, reproduce them locally, -# save logs as regrind-TESTNAME.log, and display any errors found. -# Also save files regrind-failed.txt listing failed tests, -# and regrind-failed-map.txt showing which bot URLs have which failed tests -# (handy when filing bugs). -# -# Only scrapes linux layout bot at the moment. -# TODO: handle layout tests that don't have obvious path to test file -# TODO: extend script to handle more kinds of errors and more tests - -# where the valgrind layout bot results live -LAYOUT_URL="http://build.chromium.org/p/chromium.memory.fyi/builders/Webkit%20Linux%20(valgrind%20layout)" -# how many builds back to check -LAYOUT_COUNT=250 - -# regexp to match valgrind errors -PATTERN="are definitely|uninitialised|Unhandled exception|\ -Invalid read|Invalid write|Invalid free|Source and desti|Mismatched free|\ -unaddressable byte|vex x86|the 'impossible' happened|\ -valgrind:.*: Assertion.*failed|VALGRIND INTERNAL ERROR" - -usage() { - echo "Usage: regrind.sh [--noscrape][--norepro][--keep]" - echo "--noscrape: don't scrape bots, just use old regrind-failed.txt" - echo "--norepro: don't reproduce locally" - echo "--keep: keep temp files" - exit 1 -} - -# Given a log on stdin, list all the tests that failed in that log. -layout_list_failed_tests() { - grep "Command:.*LayoutTests" | - sed 's/<.*>//' | - sed 's/.*LayoutTests/LayoutTests/' | - sort -u | - tr -d '\015' -} - -# Generate a list of failed tests in regrind-failed.txt by scraping bot. -# Scrape most recent first, so if user interrupts, he is left with fresh-ish data. -scrape_layout() { - rm -f regrind-*.tmp* regrind-failed.txt regrind-failed-map.txt - touch regrind-failed.txt - - # First, grab the number of the latest complete build. - wget -q -O regrind-builds.html "$LAYOUT_URL" - latest=`grep "
  • regrind-$i.tmp.failed - if test -s regrind-$i.tmp.failed - then - # Yes. Log them to stdout, - echo "$url" - cat regrind-$i.tmp.failed - # to the table regrind-failed-map.txt, - cat regrind-$i.tmp.failed | sed "s,^,$url ," >> regrind-failed-map.txt - # and, if not already there, to regrind-failed.txt. - for test in `cat regrind-$i.tmp.failed` - do - fgrep "$test" regrind-failed.txt > /dev/null 2>&1 || echo "$test" >> regrind-failed.txt - done - else - rm regrind-$i.tmp.failed - fi - # Sleep 1/3 sec per fetch - case $i in - *[036]) sleep 1;; - esac - i=`expr $i - 1` - done - - # Finally, munge the logs to identify tests that probably failed. - sh c.sh -l regrind-*.tmp > regrind-errfiles.txt - cat `cat regrind-errfiles.txt` | layout_list_failed_tests > regrind-failed.txt -} - -# Run the tests identified in regrind-failed.txt locally under valgrind. -# Save logs in regrind-$TESTNAME.log. -repro_layout() { - echo Running `wc -l < regrind-failed.txt` layout tests. - for test in `cat regrind-failed.txt` - do - logname="`echo $test | tr / _`" - echo "sh tools/valgrind/valgrind_webkit_tests.sh $test" - sh tools/valgrind/valgrind_webkit_tests.sh "$test" > regrind-"$logname".log 2>&1 - egrep "$PATTERN" < regrind-"$logname".log | sed 's/==.*==//' - done -} - -do_repro=1 -do_scrape=1 -do_cleanup=1 -while test ! -z "$1" -do - case "$1" in - --noscrape) do_scrape=0;; - --norepro) do_repro=0;; - --keep) do_cleanup=0;; - *) usage;; - esac - shift -done - -echo "WARNING: This script is not supported and may be out of date" - -if test $do_scrape = 0 && test $do_repro = 0 -then - usage -fi - -if test $do_scrape = 1 -then - scrape_layout -fi - -if test $do_repro = 1 -then - repro_layout -fi - -if test $do_cleanup = 1 -then - rm -f regrind-errfiles.txt regrind-*.tmp* -fi diff --git a/chromium/tools/valgrind/reliability/url_list.txt b/chromium/tools/valgrind/reliability/url_list.txt deleted file mode 100644 index ac531225602..00000000000 --- a/chromium/tools/valgrind/reliability/url_list.txt +++ /dev/null @@ -1,11 +0,0 @@ -www.google.com -maps.google.com -news.google.com -www.youtube.com -build.chromium.org/p/chromium/waterfall -build.chromium.org/p/chromium.memory/console -build.chromium.org/f/chromium/perf/dashboard/overview.html -www.slashdot.org -www.ibanez.co.jp/japan/index.html -www.bbc.co.uk/arabic/ -www.uni.edu/becker/chinese2.html diff --git a/chromium/tools/valgrind/scan-build.py b/chromium/tools/valgrind/scan-build.py deleted file mode 100755 index b58b6cc447e..00000000000 --- a/chromium/tools/valgrind/scan-build.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import argparse -import errno -import os -import re -import sys -import urllib -import urllib2 - -# Where all the data lives. -ROOT_URL = "http://build.chromium.org/p/chromium.memory.fyi/builders" - -# TODO(groby) - support multi-line search from the command line. Useful when -# scanning for classes of failures, see below. -SEARCH_STRING = """

    -Failed memory test: content -

    """ - -# Location of the log cache. -CACHE_DIR = "buildlogs.tmp" - -# If we don't find anything after searching |CUTOFF| logs, we're probably done. -CUTOFF = 100 - -def EnsurePath(path): - """Makes sure |path| does exist, tries to create it if it doesn't.""" - try: - os.makedirs(path) - except OSError as exception: - if exception.errno != errno.EEXIST: - raise - - -class Cache(object): - def __init__(self, root_dir): - self._root_dir = os.path.abspath(root_dir) - - def _LocalName(self, name): - """If name is a relative path, treat it as relative to cache root. - If it is absolute and under cache root, pass it through. - Otherwise, raise error. - """ - if os.path.isabs(name): - assert os.path.commonprefix([name, self._root_dir]) == self._root_dir - else: - name = os.path.join(self._root_dir, name) - return name - - def _FetchLocal(self, local_name): - local_name = self._LocalName(local_name) - EnsurePath(os.path.dirname(local_name)) - if os.path.exists(local_name): - f = open(local_name, 'r') - return f.readlines(); - return None - - def _FetchRemote(self, remote_name): - try: - response = urllib2.urlopen(remote_name) - except: - print "Could not fetch", remote_name - raise - return response.read() - - def Update(self, local_name, remote_name): - local_name = self._LocalName(local_name) - EnsurePath(os.path.dirname(local_name)) - blob = self._FetchRemote(remote_name) - f = open(local_name, "w") - f.write(blob) - return blob.splitlines() - - def FetchData(self, local_name, remote_name): - result = self._FetchLocal(local_name) - if result: - return result - # If we get here, the local cache does not exist yet. Fetch, and store. - return self.Update(local_name, remote_name) - - -class Builder(object): - def __init__(self, waterfall, name): - self._name = name - self._waterfall = waterfall - - def Name(self): - return self._name - - def LatestBuild(self): - return self._waterfall.GetLatestBuild(self._name) - - def GetBuildPath(self, build_num): - return "%s/%s/builds/%d" % ( - self._waterfall._root_url, urllib.quote(self._name), build_num) - - def _FetchBuildLog(self, build_num): - local_build_path = "builds/%s" % self._name - local_build_file = os.path.join(local_build_path, "%d.log" % build_num) - return self._waterfall._cache.FetchData(local_build_file, - self.GetBuildPath(build_num)) - - def _CheckLog(self, build_num, tester): - log_lines = self._FetchBuildLog(build_num) - return any(tester(line) for line in log_lines) - - def ScanLogs(self, tester): - occurrences = [] - build = self.LatestBuild() - no_results = 0 - while build != 0 and no_results < CUTOFF: - if self._CheckLog(build, tester): - occurrences.append(build) - else: - no_results = no_results + 1 - build = build - 1 - return occurrences - - -class Waterfall(object): - def __init__(self, root_url, cache_dir): - self._root_url = root_url - self._builders = {} - self._top_revision = {} - self._cache = Cache(cache_dir) - - def Builders(self): - return self._builders.values() - - def Update(self): - self._cache.Update("builders", self._root_url) - self.FetchInfo() - - def FetchInfo(self): - if self._top_revision: - return - - html = self._cache.FetchData("builders", self._root_url) - - """ Search for both builders and latest build number in HTML - identifies a builder - is the latest build. - """ - box_matcher = re.compile('.*a href[^>]*>([^<]*)\<') - build_matcher = re.compile('.*a href=\"builders/(.*)/builds/([0-9]+)\".*') - last_builder = "" - for line in html: - if 'a href="builders/' in line: - if 'td class="box"' in line: - last_builder = box_matcher.match(line).group(1) - self._builders[last_builder] = Builder(self, last_builder) - else: - result = build_matcher.match(line) - builder = result.group(1) - assert builder == urllib.quote(last_builder) - self._top_revision[last_builder] = int(result.group(2)) - - def GetLatestBuild(self, name): - self.FetchInfo() - assert self._top_revision - return self._top_revision[name] - - -class MultiLineChange(object): - def __init__(self, lines): - self._tracked_lines = lines - self._current = 0 - - def __call__(self, line): - """ Test a single line against multi-line change. - - If it matches the currently active line, advance one line. - If the current line is the last line, report a match. - """ - if self._tracked_lines[self._current] in line: - self._current = self._current + 1 - if self._current == len(self._tracked_lines): - self._current = 0 - return True - else: - self._current = 0 - return False - - -def main(argv): - # Create argument parser. - parser = argparse.ArgumentParser() - commands = parser.add_mutually_exclusive_group(required=True) - commands.add_argument("--update", action='store_true') - commands.add_argument("--find", metavar='search term') - args = parser.parse_args() - - path = os.path.abspath(os.path.dirname(argv[0])) - cache_path = os.path.join(path, CACHE_DIR) - - fyi = Waterfall(ROOT_URL, cache_path) - - if args.update: - fyi.Update() - for builder in fyi.Builders(): - print "Updating", builder.Name() - builder.ScanLogs(lambda x:False) - - if args.find: - tester = MultiLineChange(args.find.splitlines()) - fyi.FetchInfo() - - print "SCANNING FOR ", args.find - for builder in fyi.Builders(): - print "Scanning", builder.Name() - occurrences = builder.ScanLogs(tester) - if occurrences: - min_build = min(occurrences) - path = builder.GetBuildPath(min_build) - print "Earliest occurrence in build %d" % min_build - print "Latest occurrence in build %d" % max(occurrences) - print "Latest build: %d" % builder.LatestBuild() - print path - print "%d total" % len(occurrences) - - -if __name__ == "__main__": - sys.exit(main(sys.argv)) - diff --git a/chromium/tools/valgrind/suppressions.py b/chromium/tools/valgrind/suppressions.py deleted file mode 100755 index 48955984d2c..00000000000 --- a/chromium/tools/valgrind/suppressions.py +++ /dev/null @@ -1,1018 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# suppressions.py - -"""Post-process Valgrind suppression matcher. - -Suppressions are defined as follows: - -# optional one-line comments anywhere in the suppressions file. -{ - - Toolname:Errortype - fun:function_name - obj:object_filename - fun:wildcarded_fun*_name - # an ellipsis wildcards zero or more functions in a stack. - ... - fun:some_other_function_name -} - -If ran from the command line, suppressions.py does a self-test -of the Suppression class. -""" - -import os -import re -import sys - -sys.path.insert(0, os.path.join(os.path.dirname(__file__), - '..', 'python', 'google')) -import path_utils - - -ELLIPSIS = '...' - - -def GetSuppressions(): - suppressions_root = path_utils.ScriptDir() - JOIN = os.path.join - - result = {} - - supp_filename = JOIN(suppressions_root, "memcheck", "suppressions.txt") - vg_common = ReadSuppressionsFromFile(supp_filename) - supp_filename = JOIN(suppressions_root, "tsan", "suppressions.txt") - tsan_common = ReadSuppressionsFromFile(supp_filename) - result['common_suppressions'] = vg_common + tsan_common - - supp_filename = JOIN(suppressions_root, "memcheck", "suppressions_linux.txt") - vg_linux = ReadSuppressionsFromFile(supp_filename) - supp_filename = JOIN(suppressions_root, "tsan", "suppressions_linux.txt") - tsan_linux = ReadSuppressionsFromFile(supp_filename) - result['linux_suppressions'] = vg_linux + tsan_linux - - supp_filename = JOIN(suppressions_root, "memcheck", "suppressions_mac.txt") - vg_mac = ReadSuppressionsFromFile(supp_filename) - supp_filename = JOIN(suppressions_root, "tsan", "suppressions_mac.txt") - tsan_mac = ReadSuppressionsFromFile(supp_filename) - result['mac_suppressions'] = vg_mac + tsan_mac - - supp_filename = JOIN(suppressions_root, "tsan", "suppressions_win32.txt") - tsan_win = ReadSuppressionsFromFile(supp_filename) - result['win_suppressions'] = tsan_win - - supp_filename = JOIN(suppressions_root, "..", "heapcheck", "suppressions.txt") - result['heapcheck_suppressions'] = ReadSuppressionsFromFile(supp_filename) - - supp_filename = JOIN(suppressions_root, "drmemory", "suppressions.txt") - result['drmem_suppressions'] = ReadSuppressionsFromFile(supp_filename) - supp_filename = JOIN(suppressions_root, "drmemory", "suppressions_full.txt") - result['drmem_full_suppressions'] = ReadSuppressionsFromFile(supp_filename) - - return result - - -def GlobToRegex(glob_pattern, ignore_case=False): - """Translate glob wildcards (*?) into regex syntax. Escape the rest.""" - regex = '' - for char in glob_pattern: - if char == '*': - regex += '.*' - elif char == '?': - regex += '.' - elif ignore_case and char.isalpha(): - regex += '[%s%s]' % (char.lower(), char.upper()) - else: - regex += re.escape(char) - return ''.join(regex) - - -def StripAndSkipCommentsIterator(lines): - """Generator of (line_no, line) pairs that strips comments and whitespace.""" - for (line_no, line) in enumerate(lines): - line = line.strip() # Drop \n - if line.startswith('#'): - continue # Comments - # Skip comment lines, but not empty lines, they indicate the end of a - # suppression. Add one to the line number as well, since most editors use - # 1-based numberings, and enumerate is 0-based. - yield (line_no + 1, line) - - -class Suppression(object): - """This class represents a single stack trace suppression. - - Attributes: - description: A string representing the error description. - type: A string representing the error type, e.g. Memcheck:Leak. - stack: The lines comprising the stack trace for the suppression. - regex: The actual regex used to match against scraped reports. - """ - - def __init__(self, description, type, stack, defined_at, regex): - """Inits Suppression. - - description, type, stack, regex: same as class attributes - defined_at: file:line identifying where the suppression was defined - """ - self.description = description - self.type = type - self.stack = stack - self.defined_at = defined_at - self.regex = re.compile(regex, re.MULTILINE) - - def Match(self, suppression_from_report): - """Returns bool indicating whether this suppression matches - the suppression generated from Valgrind error report. - - We match our suppressions against generated suppressions - (not against reports) since they have the same format - while the reports are taken from XML, contain filenames, - they are demangled, and are generally more difficult to - parse. - - Args: - suppression_from_report: list of strings (function names). - Returns: - True if the suppression is not empty and matches the report. - """ - if not self.stack: - return False - lines = [f.strip() for f in suppression_from_report] - return self.regex.match('\n'.join(lines) + '\n') is not None - - -def FilenameToTool(filename): - """Return the name of the tool that a file is related to, or None. - - Example mappings: - tools/heapcheck/suppressions.txt -> heapcheck - tools/valgrind/tsan/suppressions.txt -> tsan - tools/valgrind/drmemory/suppressions.txt -> drmemory - tools/valgrind/drmemory/suppressions_full.txt -> drmemory - tools/valgrind/memcheck/suppressions.txt -> memcheck - tools/valgrind/memcheck/suppressions_mac.txt -> memcheck - """ - filename = os.path.abspath(filename) - parts = filename.split(os.sep) - tool = parts[-2] - if tool in ('heapcheck', 'drmemory', 'memcheck', 'tsan'): - return tool - return None - - -def ReadSuppressionsFromFile(filename): - """Read suppressions from the given file and return them as a list""" - tool_to_parser = { - "drmemory": ReadDrMemorySuppressions, - "memcheck": ReadValgrindStyleSuppressions, - "tsan": ReadValgrindStyleSuppressions, - "heapcheck": ReadValgrindStyleSuppressions, - } - tool = FilenameToTool(filename) - assert tool in tool_to_parser, ( - "unknown tool %s for filename %s" % (tool, filename)) - parse_func = tool_to_parser[tool] - - # Consider non-existent files to be empty. - if not os.path.exists(filename): - return [] - - input_file = file(filename, 'r') - try: - return parse_func(input_file, filename) - except SuppressionError: - input_file.close() - raise - - -class ValgrindStyleSuppression(Suppression): - """A suppression using the Valgrind syntax. - - Most tools, even ones that are not Valgrind-based, use this syntax, ie - Heapcheck, TSan, etc. - - Attributes: - Same as Suppression. - """ - - def __init__(self, description, type, stack, defined_at): - """Creates a suppression using the Memcheck, TSan, and Heapcheck syntax.""" - regex = '{\n.*\n%s\n' % type - for line in stack: - if line == ELLIPSIS: - regex += '(.*\n)*' - else: - regex += GlobToRegex(line) - regex += '\n' - regex += '(.*\n)*' - regex += '}' - - # In the recent version of valgrind-variant we've switched - # from memcheck's default Addr[1248]/Value[1248]/Cond suppression types - # to simply Unaddressable/Uninitialized. - # The suppression generator no longer gives us "old" types thus - # for the "new-type" suppressions: - # * Memcheck:Unaddressable should also match Addr* reports, - # * Memcheck:Uninitialized should also match Cond and Value reports, - # - # We also want to support legacy suppressions (e.g. copied from - # upstream bugs etc), so: - # * Memcheck:Addr[1248] suppressions should match Unaddressable reports, - # * Memcheck:Cond and Memcheck:Value[1248] should match Uninitialized. - # Please note the latest two rules only apply to the - # tools/valgrind/waterfall.sh suppression matcher and the real - # valgrind-variant Memcheck will not suppress - # e.g. Addr1 printed as Unaddressable with Addr4 suppression. - # Be careful to check the access size while copying legacy suppressions! - for sz in [1, 2, 4, 8]: - regex = regex.replace("\nMemcheck:Addr%d\n" % sz, - "\nMemcheck:(Addr%d|Unaddressable)\n" % sz) - regex = regex.replace("\nMemcheck:Value%d\n" % sz, - "\nMemcheck:(Value%d|Uninitialized)\n" % sz) - regex = regex.replace("\nMemcheck:Cond\n", - "\nMemcheck:(Cond|Uninitialized)\n") - regex = regex.replace("\nMemcheck:Unaddressable\n", - "\nMemcheck:(Addr.|Unaddressable)\n") - regex = regex.replace("\nMemcheck:Uninitialized\n", - "\nMemcheck:(Cond|Value.|Uninitialized)\n") - - return super(ValgrindStyleSuppression, self).__init__( - description, type, stack, defined_at, regex) - - def __str__(self): - """Stringify.""" - lines = [self.description, self.type] + self.stack - return "{\n %s\n}\n" % "\n ".join(lines) - - -class SuppressionError(Exception): - def __init__(self, message, happened_at): - self._message = message - self._happened_at = happened_at - - def __str__(self): - return 'Error reading suppressions at %s!\n%s' % ( - self._happened_at, self._message) - - -def ReadValgrindStyleSuppressions(lines, supp_descriptor): - """Given a list of lines, returns a list of suppressions. - - Args: - lines: a list of lines containing suppressions. - supp_descriptor: should typically be a filename. - Used only when printing errors. - """ - result = [] - cur_descr = '' - cur_type = '' - cur_stack = [] - in_suppression = False - nline = 0 - for line in lines: - nline += 1 - line = line.strip() - if line.startswith('#'): - continue - if not in_suppression: - if not line: - # empty lines between suppressions - pass - elif line.startswith('{'): - in_suppression = True - pass - else: - raise SuppressionError('Expected: "{"', - "%s:%d" % (supp_descriptor, nline)) - elif line.startswith('}'): - result.append( - ValgrindStyleSuppression(cur_descr, cur_type, cur_stack, - "%s:%d" % (supp_descriptor, nline))) - cur_descr = '' - cur_type = '' - cur_stack = [] - in_suppression = False - elif not cur_descr: - cur_descr = line - continue - elif not cur_type: - if (not line.startswith("Memcheck:") and - not line.startswith("ThreadSanitizer:") and - (line != "Heapcheck:Leak")): - raise SuppressionError( - 'Expected "Memcheck:TYPE", "ThreadSanitizer:TYPE" ' - 'or "Heapcheck:Leak", got "%s"' % line, - "%s:%d" % (supp_descriptor, nline)) - supp_type = line.split(':')[1] - if not supp_type in ["Addr1", "Addr2", "Addr4", "Addr8", - "Cond", "Free", "Jump", "Leak", "Overlap", "Param", - "Value1", "Value2", "Value4", "Value8", - "Race", "UnlockNonLocked", "InvalidLock", - "Unaddressable", "Uninitialized"]: - raise SuppressionError('Unknown suppression type "%s"' % supp_type, - "%s:%d" % (supp_descriptor, nline)) - cur_type = line - continue - elif re.match("^fun:.*|^obj:.*|^\.\.\.$", line): - cur_stack.append(line.strip()) - elif len(cur_stack) == 0 and cur_type == "Memcheck:Param": - cur_stack.append(line.strip()) - else: - raise SuppressionError( - '"fun:function_name" or "obj:object_file" or "..." expected', - "%s:%d" % (supp_descriptor, nline)) - return result - - -def PresubmitCheckSuppressions(supps): - """Check a list of suppressions and return a list of SuppressionErrors. - - Mostly useful for separating the checking logic from the Presubmit API for - testing. - """ - known_supp_names = {} # Key: name, Value: suppression. - errors = [] - for s in supps: - if re.search("<.*suppression.name.here>", s.description): - # Suppression name line is - # for Memcheck, - # for TSan, - # name= for DrMemory - errors.append( - SuppressionError( - "You've forgotten to put a suppression name like bug_XXX", - s.defined_at)) - continue - - if s.description in known_supp_names: - errors.append( - SuppressionError( - 'Suppression named "%s" is defined more than once, ' - 'see %s' % (s.description, - known_supp_names[s.description].defined_at), - s.defined_at)) - else: - known_supp_names[s.description] = s - return errors - - -def PresubmitCheck(input_api, output_api): - """A helper function useful in PRESUBMIT.py - Returns a list of errors or []. - """ - sup_regex = re.compile('suppressions.*\.txt$') - filenames = [f.AbsoluteLocalPath() for f in input_api.AffectedFiles() - if sup_regex.search(f.LocalPath())] - - errors = [] - - # TODO(timurrrr): warn on putting suppressions into a wrong file, - # e.g. TSan suppression in a memcheck file. - - for f in filenames: - try: - supps = ReadSuppressionsFromFile(f) - errors.extend(PresubmitCheckSuppressions(supps)) - except SuppressionError as e: - errors.append(e) - - return [output_api.PresubmitError(str(e)) for e in errors] - - -class DrMemorySuppression(Suppression): - """A suppression using the DrMemory syntax. - - Attributes: - instr: The instruction to match. - Rest inherited from Suppression. - """ - - def __init__(self, name, report_type, instr, stack, defined_at): - """Constructor.""" - self.instr = instr - - # Construct the regex. - regex = '{\n' - if report_type == 'LEAK': - regex += '(POSSIBLE )?LEAK' - else: - regex += report_type - regex += '\nname=.*\n' - - # TODO(rnk): Implement http://crbug.com/107416#c5 . - # drmemory_analyze.py doesn't generate suppressions with an instruction in - # them, so these suppressions will always fail to match. We should override - # Match to fetch the instruction from the report and try to match against - # that. - if instr: - regex += 'instruction=%s\n' % GlobToRegex(instr) - - for line in stack: - if line == ELLIPSIS: - regex += '(.*\n)*' - elif '!' in line: - (mod, func) = line.split('!') - if func == ELLIPSIS: # mod!ellipsis frame - regex += '(%s\!.*\n)+' % GlobToRegex(mod, ignore_case=True) - else: # mod!func frame - # Ignore case for the module match, but not the function match. - regex += '%s\!%s\n' % (GlobToRegex(mod, ignore_case=True), - GlobToRegex(func, ignore_case=False)) - else: - regex += GlobToRegex(line) - regex += '\n' - regex += '(.*\n)*' # Match anything left in the stack. - regex += '}' - return super(DrMemorySuppression, self).__init__(name, report_type, stack, - defined_at, regex) - - def __str__(self): - """Stringify.""" - text = self.type + "\n" - if self.description: - text += "name=%s\n" % self.description - if self.instr: - text += "instruction=%s\n" % self.instr - text += "\n".join(self.stack) - text += "\n" - return text - - -# Possible DrMemory error report types. Keep consistent with suppress_name -# array in drmemory/drmemory/report.c. -DRMEMORY_ERROR_TYPES = [ - 'UNADDRESSABLE ACCESS', - 'UNINITIALIZED READ', - 'INVALID HEAP ARGUMENT', - 'GDI USAGE ERROR', - 'HANDLE LEAK', - 'LEAK', - 'POSSIBLE LEAK', - 'WARNING', - ] - - -# Regexes to match valid drmemory frames. -DRMEMORY_FRAME_PATTERNS = [ - re.compile(r"^.*\!.*$"), # mod!func - re.compile(r"^.*!\.\.\.$"), # mod!ellipsis - re.compile(r"^\<.*\+0x.*\>$"), # - re.compile(r"^\$"), - re.compile(r"^system call .*$"), - re.compile(r"^\*$"), # wildcard - re.compile(r"^\.\.\.$"), # ellipsis - ] - - -def ReadDrMemorySuppressions(lines, supp_descriptor): - """Given a list of lines, returns a list of DrMemory suppressions. - - Args: - lines: a list of lines containing suppressions. - supp_descriptor: should typically be a filename. - Used only when parsing errors happen. - """ - lines = StripAndSkipCommentsIterator(lines) - suppressions = [] - for (line_no, line) in lines: - if not line: - continue - if line not in DRMEMORY_ERROR_TYPES: - raise SuppressionError('Expected a DrMemory error type, ' - 'found %r instead\n Valid error types: %s' % - (line, ' '.join(DRMEMORY_ERROR_TYPES)), - "%s:%d" % (supp_descriptor, line_no)) - - # Suppression starts here. - report_type = line - name = '' - instr = None - stack = [] - defined_at = "%s:%d" % (supp_descriptor, line_no) - found_stack = False - for (line_no, line) in lines: - if not found_stack and line.startswith('name='): - name = line.replace('name=', '') - elif not found_stack and line.startswith('instruction='): - instr = line.replace('instruction=', '') - else: - # Unrecognized prefix indicates start of stack trace. - found_stack = True - if not line: - # Blank line means end of suppression. - break - if not any([regex.match(line) for regex in DRMEMORY_FRAME_PATTERNS]): - raise SuppressionError( - ('Unexpected stack frame pattern at line %d\n' + - 'Frames should be one of the following:\n' + - ' module!function\n' + - ' module!...\n' + - ' \n' + - ' \n' + - ' system call Name\n' + - ' *\n' + - ' ...\n') % line_no, defined_at) - stack.append(line) - - if len(stack) == 0: # In case we hit EOF or blank without any stack frames. - raise SuppressionError('Suppression "%s" has no stack frames, ends at %d' - % (name, line_no), defined_at) - if stack[-1] == ELLIPSIS: - raise SuppressionError('Suppression "%s" ends in an ellipsis on line %d' % - (name, line_no), defined_at) - - suppressions.append( - DrMemorySuppression(name, report_type, instr, stack, defined_at)) - - return suppressions - - -def ParseSuppressionOfType(lines, supp_descriptor, def_line_no, report_type): - """Parse the suppression starting on this line. - - Suppressions start with a type, have an optional name and instruction, and a - stack trace that ends in a blank line. - """ - - - -def TestStack(stack, positive, negative, suppression_parser=None): - """A helper function for SelfTest() that checks a single stack. - - Args: - stack: the stack to match the suppressions. - positive: the list of suppressions that must match the given stack. - negative: the list of suppressions that should not match. - suppression_parser: optional arg for the suppression parser, default is - ReadValgrindStyleSuppressions. - """ - if not suppression_parser: - suppression_parser = ReadValgrindStyleSuppressions - for supp in positive: - parsed = suppression_parser(supp.split("\n"), "positive_suppression") - assert parsed[0].Match(stack.split("\n")), ( - "Suppression:\n%s\ndidn't match stack:\n%s" % (supp, stack)) - for supp in negative: - parsed = suppression_parser(supp.split("\n"), "negative_suppression") - assert not parsed[0].Match(stack.split("\n")), ( - "Suppression:\n%s\ndid match stack:\n%s" % (supp, stack)) - - -def TestFailPresubmit(supp_text, error_text, suppression_parser=None): - """A helper function for SelfTest() that verifies a presubmit check fires. - - Args: - supp_text: suppression text to parse. - error_text: text of the presubmit error we expect to find. - suppression_parser: optional arg for the suppression parser, default is - ReadValgrindStyleSuppressions. - """ - if not suppression_parser: - suppression_parser = ReadValgrindStyleSuppressions - try: - supps = suppression_parser(supp_text.split("\n"), "") - except SuppressionError, e: - # If parsing raised an exception, match the error text here. - assert error_text in str(e), ( - "presubmit text %r not in SuppressionError:\n%r" % - (error_text, str(e))) - else: - # Otherwise, run the presubmit checks over the supps. We expect a single - # error that has text matching error_text. - errors = PresubmitCheckSuppressions(supps) - assert len(errors) == 1, ( - "expected exactly one presubmit error, got:\n%s" % errors) - assert error_text in str(errors[0]), ( - "presubmit text %r not in SuppressionError:\n%r" % - (error_text, str(errors[0]))) - - -def SelfTest(): - """Tests the Suppression.Match() capabilities.""" - - test_memcheck_stack_1 = """{ - test - Memcheck:Leak - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - test_memcheck_stack_2 = """{ - test - Memcheck:Uninitialized - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - test_memcheck_stack_3 = """{ - test - Memcheck:Unaddressable - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - test_memcheck_stack_4 = """{ - test - Memcheck:Addr4 - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - test_heapcheck_stack = """{ - test - Heapcheck:Leak - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - test_tsan_stack = """{ - test - ThreadSanitizer:Race - fun:absolutly - fun:brilliant - obj:condition - fun:detection - fun:expression - }""" - - - positive_memcheck_suppressions_1 = [ - "{\nzzz\nMemcheck:Leak\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Leak\nfun:ab*ly\n}", - "{\nzzz\nMemcheck:Leak\nfun:absolutly\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\n...\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\n...\nfun:detection\n}", - "{\nzzz\nMemcheck:Leak\nfun:absolutly\n...\nfun:detection\n}", - "{\nzzz\nMemcheck:Leak\nfun:ab*ly\n...\nfun:detection\n}", - "{\nzzz\nMemcheck:Leak\n...\nobj:condition\n}", - "{\nzzz\nMemcheck:Leak\n...\nobj:condition\nfun:detection\n}", - "{\nzzz\nMemcheck:Leak\n...\nfun:brilliant\nobj:condition\n}", - ] - - positive_memcheck_suppressions_2 = [ - "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Uninitialized\nfun:ab*ly\n}", - "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\nfun:brilliant\n}", - # Legacy suppression types - "{\nzzz\nMemcheck:Value1\n...\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Cond\n...\nfun:detection\n}", - "{\nzzz\nMemcheck:Value8\nfun:absolutly\nfun:brilliant\n}", - ] - - positive_memcheck_suppressions_3 = [ - "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\nfun:brilliant\n}", - # Legacy suppression types - "{\nzzz\nMemcheck:Addr1\n...\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Addr8\n...\nfun:detection\n}", - ] - - positive_memcheck_suppressions_4 = [ - "{\nzzz\nMemcheck:Addr4\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Unaddressable\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Addr4\nfun:absolutly\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Unaddressable\n...\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Addr4\n...\nfun:detection\n}", - ] - - positive_heapcheck_suppressions = [ - "{\nzzz\nHeapcheck:Leak\n...\nobj:condition\n}", - "{\nzzz\nHeapcheck:Leak\nfun:absolutly\n}", - ] - - positive_tsan_suppressions = [ - "{\nzzz\nThreadSanitizer:Race\n...\nobj:condition\n}", - "{\nzzz\nThreadSanitizer:Race\nfun:absolutly\n}", - ] - - negative_memcheck_suppressions_1 = [ - "{\nzzz\nMemcheck:Leak\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Leak\nfun:ab*liant\n}", - "{\nzzz\nMemcheck:Leak\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\nobj:condition\n}", - "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}", - ] - - negative_memcheck_suppressions_2 = [ - "{\nzzz\nMemcheck:Cond\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Value2\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Uninitialized\nfun:ab*liant\n}", - "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\nobj:condition\n}", - "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Unaddressable\nfun:brilliant\n}", - ] - - negative_memcheck_suppressions_3 = [ - "{\nzzz\nMemcheck:Addr1\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Uninitialized\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Addr2\nfun:ab*liant\n}", - "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\nobj:condition\n}", - "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}", - ] - - negative_memcheck_suppressions_4 = [ - "{\nzzz\nMemcheck:Addr1\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Addr4\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Unaddressable\nfun:abnormal\n}", - "{\nzzz\nMemcheck:Addr1\nfun:absolutly\n}", - "{\nzzz\nMemcheck:Addr2\nfun:ab*liant\n}", - "{\nzzz\nMemcheck:Value4\nfun:brilliant\n}", - "{\nzzz\nMemcheck:Leak\nobj:condition\n}", - "{\nzzz\nMemcheck:Addr8\nfun:brilliant\n}", - ] - - negative_heapcheck_suppressions = [ - "{\nzzz\nMemcheck:Leak\nfun:absolutly\n}", - "{\nzzz\nHeapcheck:Leak\nfun:brilliant\n}", - ] - - negative_tsan_suppressions = [ - "{\nzzz\nThreadSanitizer:Leak\nfun:absolutly\n}", - "{\nzzz\nThreadSanitizer:Race\nfun:brilliant\n}", - ] - - TestStack(test_memcheck_stack_1, - positive_memcheck_suppressions_1, - negative_memcheck_suppressions_1) - TestStack(test_memcheck_stack_2, - positive_memcheck_suppressions_2, - negative_memcheck_suppressions_2) - TestStack(test_memcheck_stack_3, - positive_memcheck_suppressions_3, - negative_memcheck_suppressions_3) - TestStack(test_memcheck_stack_4, - positive_memcheck_suppressions_4, - negative_memcheck_suppressions_4) - TestStack(test_heapcheck_stack, positive_heapcheck_suppressions, - negative_heapcheck_suppressions) - TestStack(test_tsan_stack, positive_tsan_suppressions, - negative_tsan_suppressions) - - # TODO(timurrrr): add TestFailPresubmit tests. - - ### DrMemory self tests. - - # http://crbug.com/96010 suppression. - stack_96010 = """{ - UNADDRESSABLE ACCESS - name= - *!TestingProfile::FinishInit - *!TestingProfile::TestingProfile - *!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody - *!testing::Test::Run - }""" - - suppress_96010 = [ - "UNADDRESSABLE ACCESS\nname=zzz\n...\n*!testing::Test::Run\n", - ("UNADDRESSABLE ACCESS\nname=zzz\n...\n" + - "*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody\n"), - "UNADDRESSABLE ACCESS\nname=zzz\n...\n*!BrowserAboutHandlerTest*\n", - "UNADDRESSABLE ACCESS\nname=zzz\n*!TestingProfile::FinishInit\n", - # No name should be needed - "UNADDRESSABLE ACCESS\n*!TestingProfile::FinishInit\n", - # Whole trace - ("UNADDRESSABLE ACCESS\n" + - "*!TestingProfile::FinishInit\n" + - "*!TestingProfile::TestingProfile\n" + - "*!BrowserAboutHandlerTest_WillHandleBrowserAboutURL_Test::TestBody\n" + - "*!testing::Test::Run\n"), - ] - - negative_96010 = [ - # Wrong type - "UNINITIALIZED READ\nname=zzz\n*!TestingProfile::FinishInit\n", - # No ellipsis - "UNADDRESSABLE ACCESS\nname=zzz\n*!BrowserAboutHandlerTest*\n", - ] - - TestStack(stack_96010, suppress_96010, negative_96010, - suppression_parser=ReadDrMemorySuppressions) - - # Invalid heap arg - stack_invalid = """{ - INVALID HEAP ARGUMENT - name=asdf - *!foo - }""" - suppress_invalid = [ - "INVALID HEAP ARGUMENT\n*!foo\n", - ] - negative_invalid = [ - "UNADDRESSABLE ACCESS\n*!foo\n", - ] - - TestStack(stack_invalid, suppress_invalid, negative_invalid, - suppression_parser=ReadDrMemorySuppressions) - - # Suppress only ntdll - stack_in_ntdll = """{ - UNADDRESSABLE ACCESS - name= - ntdll.dll!RtlTryEnterCriticalSection - }""" - stack_not_ntdll = """{ - UNADDRESSABLE ACCESS - name= - notntdll.dll!RtlTryEnterCriticalSection - }""" - - suppress_in_ntdll = [ - "UNADDRESSABLE ACCESS\nntdll.dll!RtlTryEnterCriticalSection\n", - ] - suppress_in_any = [ - "UNADDRESSABLE ACCESS\n*!RtlTryEnterCriticalSection\n", - ] - - TestStack(stack_in_ntdll, suppress_in_ntdll + suppress_in_any, [], - suppression_parser=ReadDrMemorySuppressions) - # Make sure we don't wildcard away the "not" part and match ntdll.dll by - # accident. - TestStack(stack_not_ntdll, suppress_in_any, suppress_in_ntdll, - suppression_parser=ReadDrMemorySuppressions) - - # Suppress a POSSIBLE LEAK with LEAK. - stack_foo_possible = """{ - POSSIBLE LEAK - name=foo possible - *!foo - }""" - suppress_foo_possible = [ "POSSIBLE LEAK\n*!foo\n" ] - suppress_foo_leak = [ "LEAK\n*!foo\n" ] - TestStack(stack_foo_possible, suppress_foo_possible + suppress_foo_leak, [], - suppression_parser=ReadDrMemorySuppressions) - - # Don't suppress LEAK with POSSIBLE LEAK. - stack_foo_leak = """{ - LEAK - name=foo leak - *!foo - }""" - TestStack(stack_foo_leak, suppress_foo_leak, suppress_foo_possible, - suppression_parser=ReadDrMemorySuppressions) - - # Test case insensitivity of module names. - stack_user32_mixed_case = """{ - LEAK - name= - USER32.dll!foo - user32.DLL!bar - user32.dll!baz - }""" - suppress_user32 = [ # Module name case doesn't matter. - "LEAK\nuser32.dll!foo\nuser32.dll!bar\nuser32.dll!baz\n", - "LEAK\nUSER32.DLL!foo\nUSER32.DLL!bar\nUSER32.DLL!baz\n", - ] - no_suppress_user32 = [ # Function name case matters. - "LEAK\nuser32.dll!FOO\nuser32.dll!BAR\nuser32.dll!BAZ\n", - "LEAK\nUSER32.DLL!FOO\nUSER32.DLL!BAR\nUSER32.DLL!BAZ\n", - ] - TestStack(stack_user32_mixed_case, suppress_user32, no_suppress_user32, - suppression_parser=ReadDrMemorySuppressions) - - # Test mod!... frames. - stack_kernel32_through_ntdll = """{ - LEAK - name= - kernel32.dll!foo - KERNEL32.dll!bar - kernel32.DLL!baz - ntdll.dll!quux - }""" - suppress_mod_ellipsis = [ - "LEAK\nkernel32.dll!...\nntdll.dll!quux\n", - "LEAK\nKERNEL32.DLL!...\nntdll.dll!quux\n", - ] - no_suppress_mod_ellipsis = [ - # Need one or more matching frames, not zero, unlike regular ellipsis. - "LEAK\nuser32.dll!...\nkernel32.dll!...\nntdll.dll!quux\n", - ] - TestStack(stack_kernel32_through_ntdll, suppress_mod_ellipsis, - no_suppress_mod_ellipsis, - suppression_parser=ReadDrMemorySuppressions) - - # Test that the presubmit checks work. - forgot_to_name = """ - UNADDRESSABLE ACCESS - name= - ntdll.dll!RtlTryEnterCriticalSection - """ - TestFailPresubmit(forgot_to_name, 'forgotten to put a suppression', - suppression_parser=ReadDrMemorySuppressions) - - named_twice = """ - UNADDRESSABLE ACCESS - name=http://crbug.com/1234 - *!foo - - UNADDRESSABLE ACCESS - name=http://crbug.com/1234 - *!bar - """ - TestFailPresubmit(named_twice, 'defined more than once', - suppression_parser=ReadDrMemorySuppressions) - - forgot_stack = """ - UNADDRESSABLE ACCESS - name=http://crbug.com/1234 - """ - TestFailPresubmit(forgot_stack, 'has no stack frames', - suppression_parser=ReadDrMemorySuppressions) - - ends_in_ellipsis = """ - UNADDRESSABLE ACCESS - name=http://crbug.com/1234 - ntdll.dll!RtlTryEnterCriticalSection - ... - """ - TestFailPresubmit(ends_in_ellipsis, 'ends in an ellipsis', - suppression_parser=ReadDrMemorySuppressions) - - bad_stack_frame = """ - UNADDRESSABLE ACCESS - name=http://crbug.com/1234 - fun:memcheck_style_frame - """ - TestFailPresubmit(bad_stack_frame, 'Unexpected stack frame pattern', - suppression_parser=ReadDrMemorySuppressions) - - # Test FilenameToTool. - filenames_to_tools = { - "tools/heapcheck/suppressions.txt": "heapcheck", - "tools/valgrind/tsan/suppressions.txt": "tsan", - "tools/valgrind/drmemory/suppressions.txt": "drmemory", - "tools/valgrind/drmemory/suppressions_full.txt": "drmemory", - "tools/valgrind/memcheck/suppressions.txt": "memcheck", - "tools/valgrind/memcheck/suppressions_mac.txt": "memcheck", - "asdf/tools/valgrind/memcheck/suppressions_mac.txt": "memcheck", - "foo/bar/baz/tools/valgrind/memcheck/suppressions_mac.txt": "memcheck", - "foo/bar/baz/tools/valgrind/suppressions.txt": None, - "tools/valgrind/suppressions.txt": None, - } - for (filename, expected_tool) in filenames_to_tools.items(): - filename.replace('/', os.sep) # Make the path look native. - tool = FilenameToTool(filename) - assert tool == expected_tool, ( - "failed to get expected tool for filename %r, expected %s, got %s" % - (filename, expected_tool, tool)) - - # Test ValgrindStyleSuppression.__str__. - supp = ValgrindStyleSuppression("http://crbug.com/1234", "Memcheck:Leak", - ["...", "fun:foo"], "supp.txt:1") - # Intentional 3-space indent. =/ - supp_str = ("{\n" - " http://crbug.com/1234\n" - " Memcheck:Leak\n" - " ...\n" - " fun:foo\n" - "}\n") - assert str(supp) == supp_str, ( - "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str)) - - # Test DrMemorySuppression.__str__. - supp = DrMemorySuppression( - "http://crbug.com/1234", "LEAK", None, ["...", "*!foo"], "supp.txt:1") - supp_str = ("LEAK\n" - "name=http://crbug.com/1234\n" - "...\n" - "*!foo\n") - assert str(supp) == supp_str, ( - "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str)) - - supp = DrMemorySuppression( - "http://crbug.com/1234", "UNINITIALIZED READ", "test 0x08(%eax) $0x01", - ["ntdll.dll!*", "*!foo"], "supp.txt:1") - supp_str = ("UNINITIALIZED READ\n" - "name=http://crbug.com/1234\n" - "instruction=test 0x08(%eax) $0x01\n" - "ntdll.dll!*\n" - "*!foo\n") - assert str(supp) == supp_str, ( - "str(supp) != supp_str:\nleft: %s\nright: %s" % (str(supp), supp_str)) - - -if __name__ == '__main__': - SelfTest() - print 'PASS' diff --git a/chromium/tools/valgrind/test_suppressions.py b/chromium/tools/valgrind/test_suppressions.py deleted file mode 100755 index d02d0c90445..00000000000 --- a/chromium/tools/valgrind/test_suppressions.py +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import argparse -from collections import defaultdict -import os -import re -import subprocess -import sys - -import suppressions - - -def ReadReportsFromFile(filename): - """ Returns a list of (report_hash, report) and the URL of the report on the - waterfall. - """ - input_file = file(filename, 'r') - # reports is a list of (error hash, report) pairs. - reports = [] - in_suppression = False - cur_supp = [] - # This stores the last error hash found while reading the file. - last_hash = "" - for line in input_file: - line = line.strip() - line = line.replace("", "") - line = line.replace("", "") - line = line.replace("<", "<") - line = line.replace(">", ">") - if in_suppression: - if line == "}": - cur_supp += ["}"] - reports += [[last_hash, "\n".join(cur_supp)]] - in_suppression = False - cur_supp = [] - last_hash = "" - else: - cur_supp += [" "*3 + line] - elif line == "{": - in_suppression = True - cur_supp = ["{"] - elif line.find("Suppression (error hash=#") == 0: - last_hash = line[25:41] - # The line at the end of the file is assumed to store the URL of the report. - return reports,line - -def Demangle(names): - """ Demangle a list of C++ symbols, return a list of human-readable symbols. - """ - # -n is not the default on Mac. - args = ['c++filt', '-n'] - pipe = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE) - stdout, _ = pipe.communicate(input='\n'.join(names)) - demangled = stdout.split("\n") - # Each line ends with a newline, so the final entry of the split output - # will always be ''. - assert len(demangled) == len(names) - return demangled - -def GetSymbolsFromReport(report): - """Extract all symbols from a suppression report.""" - symbols = [] - prefix = "fun:" - prefix_len = len(prefix) - for line in report.splitlines(): - index = line.find(prefix) - if index != -1: - symbols.append(line[index + prefix_len:]) - return symbols - -def PrintTopSymbols(symbol_reports, top_count): - """Print the |top_count| symbols with the most occurrences.""" - boring_symbols=['malloc', '_Znw*', 'TestBody'] - sorted_reports = sorted(filter(lambda x:x[0] not in boring_symbols, - symbol_reports.iteritems()), - key=lambda x:len(x[1]), reverse=True) - symbols = symbol_reports.keys() - demangled = Demangle(symbols) - assert len(demangled) == len(symbols) - symboltable = dict(zip(symbols, demangled)) - - print "\n" - print "Top %d symbols" % top_count - for (symbol, suppressions) in sorted_reports[:top_count]: - print "%4d occurrences : %s" % (len(suppressions), symboltable[symbol]) - -def main(argv): - supp = suppressions.GetSuppressions() - - # all_reports is a map {report: list of urls containing this report} - all_reports = defaultdict(list) - report_hashes = {} - symbol_reports = defaultdict(list) - - # Create argument parser. - parser = argparse.ArgumentParser() - parser.add_argument('--top-symbols', type=int, default=0, - help='Print a list of the top symbols') - parser.add_argument('--symbol-filter', action='append', - help='Filter out all suppressions not containing the specified symbol(s). ' - 'Matches against the mangled names.') - parser.add_argument('--exclude-symbol', action='append', - help='Filter out all suppressions containing the specified symbol(s). ' - 'Matches against the mangled names.') - - parser.add_argument('reports', metavar='report file', nargs='+', - help='List of report files') - args = parser.parse_args(argv) - - for f in args.reports: - f_reports, url = ReadReportsFromFile(f) - for (hash, report) in f_reports: - all_reports[report] += [url] - report_hashes[report] = hash - - reports_count = 0 - for r in all_reports: - cur_supp = supp['common_suppressions'] - if all([re.search("%20Mac%20|mac_valgrind", url) - for url in all_reports[r]]): - # Include mac suppressions if the report is only present on Mac - cur_supp += supp['mac_suppressions'] - elif all([re.search("Windows%20", url) for url in all_reports[r]]): - # Include win32 suppressions if the report is only present on Windows - cur_supp += supp['win_suppressions'] - elif all([re.search("Linux%20", url) for url in all_reports[r]]): - cur_supp += supp['linux_suppressions'] - # Separate from OS matches as we want to match "Linux%20Heapcheck" twice: - if all([re.search("%20Heapcheck", url) - for url in all_reports[r]]): - cur_supp += supp['heapcheck_suppressions'] - if all(["DrMemory" in url for url in all_reports[r]]): - cur_supp += supp['drmem_suppressions'] - if all(["DrMemory%20full" in url for url in all_reports[r]]): - cur_supp += supp['drmem_full_suppressions'] - - # Test if this report is already suppressed - skip = False - for s in cur_supp: - if s.Match(r.split("\n")): - skip = True - break - - # Skip reports if none of the symbols are in the report. - if args.symbol_filter and all(not s in r for s in args.symbol_filter): - skip = True - if args.exclude_symbol and any(s in r for s in args.exclude_symbol): - skip = True - - if not skip: - reports_count += 1 - print "===================================" - print "This report observed at" - for url in all_reports[r]: - print " %s" % url - print "didn't match any suppressions:" - print "Suppression (error hash=#%s#):" % (report_hashes[r]) - print r - print "===================================" - - if args.top_symbols > 0: - symbols = GetSymbolsFromReport(r) - for symbol in symbols: - symbol_reports[symbol].append(report_hashes[r]) - - if reports_count > 0: - print ("%d unique reports don't match any of the suppressions" % - reports_count) - if args.top_symbols > 0: - PrintTopSymbols(symbol_reports, args.top_symbols) - - else: - print "Congratulations! All reports are suppressed!" - # TODO(timurrrr): also make sure none of the old suppressions - # were narrowed too much. - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/chromium/tools/valgrind/tsan/OWNERS b/chromium/tools/valgrind/tsan/OWNERS deleted file mode 100644 index 72e8ffc0db8..00000000000 --- a/chromium/tools/valgrind/tsan/OWNERS +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/chromium/tools/valgrind/tsan/PRESUBMIT.py b/chromium/tools/valgrind/tsan/PRESUBMIT.py deleted file mode 100644 index 999dc1de7d4..00000000000 --- a/chromium/tools/valgrind/tsan/PRESUBMIT.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -""" -See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts -for more details on the presubmit API built into gcl. -""" - - -def CheckChange(input_api, output_api): - """Checks the TSan suppressions files for bad suppressions.""" - - # TODO(timurrrr): find out how to do relative imports - # and remove this ugly hack. Also, the CheckChange function won't be needed. - tools_vg_path = input_api.os_path.join(input_api.PresubmitLocalPath(), '..') - import sys - old_path = sys.path - try: - sys.path = sys.path + [tools_vg_path] - import suppressions - return suppressions.PresubmitCheck(input_api, output_api) - finally: - sys.path = old_path - - -def CheckChangeOnUpload(input_api, output_api): - return CheckChange(input_api, output_api) - - -def CheckChangeOnCommit(input_api, output_api): - return CheckChange(input_api, output_api) - - -def GetPreferredTrySlaves(): - return ['linux_tsan'] diff --git a/chromium/tools/valgrind/tsan/ignores.txt b/chromium/tools/valgrind/tsan/ignores.txt deleted file mode 100644 index 6d3f73de630..00000000000 --- a/chromium/tools/valgrind/tsan/ignores.txt +++ /dev/null @@ -1,189 +0,0 @@ -# This file lists the functions, object files and source files -# which should be ignored (i.e. not instrumented) by ThreadSanitizer. -# See http://code.google.com/p/data-race-test/wiki/ThreadSanitizerIgnores. - -# ignore these libraries -obj:*/libfreetype* -obj:*/libdbus* - -# we ignore the whole NSS library for now since -# its instrumentation is very slow. -# TODO(timurrrr): investigate whether we need to instrument it -obj:*/libnss* -obj:*/nss/* - -# ignore pulseaudio - We don't have symbols there and it can be slow otherwise -obj:*/libpulse*.so* - -# ignore this standard stuff -fun:clone -fun:fork -fun:pthread_* -fun_r:_pthread_exit -fun_r:_pthread_free_pthread_onstack -fun_r:random_r -fun_r:random -fun_r:rand -fun_r:srand -fun:__new_exitfn -fun:_dl_* -fun:__dl_* -fun:*_setjmp* - -# dark magic with 'errno' here. -fun:sys_* - -# ignore libc's printf functions -fun_r:_IO_* -fun:fwrite -fun:fflush - -# False reports on std::string internals, see -# http://code.google.com/p/data-race-test/issues/detail?id=40 -fun:*_M_mutateE* -fun_r:*_M_set_length_and_sharable* -fun:*_M_is_leaked* -fun:*_M_is_shared* -fun:*_M_set_leaked* -fun:*_M_set_sharable* - -# Comparison of std::strings sometimes takes a lot of time but we don't really -# need precise stack traces there. -fun_hist:_ZStltIcSt11char_traitsIcESaIcEEbRKSbIT_T0_T1_ES8_ -fun_hist:_ZNKSs7compareERKSs - -# Don't instrument intercepts -src:*ts_valgrind_intercepts.c - -################################################################## -# Don't instrument synchronization code -src:*base/threading/thread_local_storage* -src:*base/stats_counters* -src:*base/synchronization/condition_variable* -src:*base/synchronization/lock* -src:*base/synchronization/waitable_event* - -# Don't instrument code dealing with atomics (base::subtle) -fun:*base*subtle*Release_Store* -fun:*base*subtle*NoBarrier_CompareAndSwap* -fun:*base*subtle*NoBarrier_Load* -# Keep some mangling so we don't match NoBarrier_AtomicIncrement -fun:*base*subtle23Barrier_AtomicIncrement* - -# MD5 computations are very slow due since sums are computed by -# repeatedly calling tiny functions and is unlikely to race with -# anything. -src:*base/md5* - -# Don't instrument tcmalloc -src:*/tcmalloc/* - -# This function is heavy in net_unittests -fun_r:*disk_cache*BackendImpl*CheckAllEntries* - -# V8 is a hot-spot under ThreadSanitizer. -# Lots of tiny functions there... -# TODO(timurrrr): -# Can we miss data races on V8 objects due to non thread-safe API calls -# if we don't instrument v8::internals? -fun_r:*v8*internal* - -# unibrow namespace contains lots of tiny unicode conversion functions. -fun_hist:*unibrow* - -# Histogram has tiny functions that can be called frequently -fun_hist:*Histogram* -# Recursively ignore Histrogram::Add and friends, see http://crbug.com/62694. -fun_r:*4base*9Histogram*3Add* -fun_r:*4base*16HistogramSamples*3Add* -fun_r:*4base*13HistogramBase*7AddTime* - -# TODO(timurrrr): SKIA - needs separate testing? -# SKIA unittest is single-threaded... -# SKIA uses un-annotated atomic refcount and other sync stuff -# some functions are HEAVY like png, jpeg decoding -src:*third_party/skia* - -# WebKit hotspot -fun:*png_write* - -# This function generates 25% of memory accesses in net_unittests -fun:*icu_4_2*UnicodeSet*add* - -# SQLite has lots of tiny functions and produce too many segments on some tests. -# See http://crbug.com/56511 -fun_hist:*sqlite* - -# There's some weird failure test going on in this tiny test function in sqlite -fun_r:threadLockingTest - -# Ignore accesses below GetCurrentThreadIdentifier. -# There is a benign race which is hard to suppress properly, -# see http://crbug.com/44580 -fun_r:*BrowserThread*GetCurrentThreadIdentifier* - -# BrowserThread accesses MessageLoop::current() in ::CurrentlyOn. -# We can't use suppressions to hide these reports since the concurrent stack -# is simply "base::Thread::ThreadMain" -# See http://crbug.com/63678 -fun_r:*BrowserThread*CurrentlyOn* - -# zlib is smarter than we are, see http://www.zlib.net/zlib_faq.html#faq36 -fun_r:inflate -# zlib-related reports, not investigated yet. See http://crbug.com/70932 -fun_r:*remoting*CompressorZlib*Process* - -# X11 reads the _XErrorFunction callback in a racey way, see -# http://crbug.com/65278 -fun:XSetErrorHandler - -fun:*IPC*Logging*Enable* -fun:*IPC*Logging*Disable* - -# TSan doesn't support lockf and hence shared memory locks in this function; -# http://crbug.com/45083 -fun_r:*base*StatsTable*AddCounter* - -# TSan doesn't understand internal libc locks, see http://crbug.com/71435 -fun_r:mbsrtowcs - -# gethostbyname2_r is thread-safe, however ThreadSanitizer reports races inside it and -# (sometimes) in __nss_* functions below it. -# This may be related to -# https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/59449 -fun_r:gethostbyname2_r* - -# TODO(timurrrr): remove this when TSan is updated past r3232 -fun_r:gaih_inet - -# Strange reports below _IO_getline, every time in "Concurrent access". -# Probably the reports are there since we're missing the libc internal locks -fun_r:_IO_getline* - -# A benign race in glib on something called "contention_counter". -fun:g_slice_alloc - -# A benign race in glibc on "random_time_bits". -fun:__gen_tempname - -# A probably-benign race on '__have_o_cloexec' in opendir/__alloc_dir, -# see http://crbug.com/125928. -fun_r:__alloc_dir -fun_r:opendir - -# The sqlite cache is racing against a few different stacktraces, -# so let's ignore it recursively. See http://crbug.com/84094 -fun_r:pcache1Fetch - -# "Suppress" a data race in TraceLog::GetCategory which has -# fun:MessageLoop::RunTask at the top of the "current" stack which we don't want -# to suppress. See http://crbug.com/98926 -fun:*base*debug*TraceLog*GetCategoryInternal* - -# libc threading on GCC 4.6 -fun:arena_thread_freeres - -# __strncasecmp_l_ssse3 overreads the buffer causing TSan to report a data race -# on another object. See http://crbug.com/177074 -fun:*strncasecmp* -fun:*strcasecmp* diff --git a/chromium/tools/valgrind/tsan/ignores_win32.txt b/chromium/tools/valgrind/tsan/ignores_win32.txt deleted file mode 100644 index f38b00f4541..00000000000 --- a/chromium/tools/valgrind/tsan/ignores_win32.txt +++ /dev/null @@ -1,64 +0,0 @@ -# This file lists the functions, object files and source files -# which should be ignored (i.e. not instrumented) by ThreadSanitizer on Windows. - -# We ignore security libraries for now since their instrumentation is very slow. -# TODO(timurrrr): investigate whether we need to instrument them -obj:*CRYPT32.dll -obj:*RPCRT4.dll -fun_r:*SHA256* -fun_r:*BCryptGenerateSymmetricKey* -fun_r:*CryptAcquireContext* - -obj:*WINHTTP.dll -obj:*imagehlp.dll - -# Instrumenting IP Helper API causes crashes. -# TODO(szym): investigate http://crbug.com/146119 -obj:*IPHLPAPI.dll - -# Use less detailed instrumentation of STL -fun_hist:*std::*<* -# Don't instrument some stl internals - they shouldn't be useful -fun_r:*std::_Debug* -fun_r:*std::_Lockit* - -# Benign race on mutex unlock -fun:_Mtxunlock - -# Benign race during clock initialization -fun_r:*InitializeClock* - -# Some unknown Windows guts -fun_r:Ordinal_* -fun:unnamedImageEntryPoint -fun_r:RtlDestroyQueryDebugBuffer -fun:_updatetlocinfoEx_nolock - -# Strange reports on net_unittests, maybe related to raising -# a debug exception by PlatformThread -# TODO(timurrrr): investigate -fun_r:*PlatformThread*SetName* - -# Recursively ignore Histrogram::Add and friends, see http://crbug.com/62694. -fun_r:base::Histogram::Add -fun_r:base::HistogramSamples::Add -fun_r:base::HistogramBase::AddTime - -# ffmpegsumo.dll appears to read a few bytes beyond the end of the buffer. -fun:_ff_prefetch_mmxext - -# Shows up as a race in SHELL32.dll when deleting a directory while opening an -# unrelated file in another thread. Revealed by DiskCacheBackendTest.DeleteOld. -# See: https://code.google.com/p/data-race-test/issues/detail?id=114 -fun_r:SHFileOperationW - -# Ignore internal file I/O synchronization: crbug.com/146724 -fun_r:_lock_file -fun_r:_lock_file2 -fun_r:_lock -fun_r:_flsbuf -fun_r:_unlock_file -fun_r:_getstream - -# http://crbug.com/272065 -obj:*NLAapi.dll diff --git a/chromium/tools/valgrind/tsan/suppressions.txt b/chromium/tools/valgrind/tsan/suppressions.txt deleted file mode 100644 index a4061a38060..00000000000 --- a/chromium/tools/valgrind/tsan/suppressions.txt +++ /dev/null @@ -1,1141 +0,0 @@ -# There are a few kinds of suppressions in this file. -# 1. third party stuff we have no control over -# -# 2. intentional unit test errors, or stuff that is somehow a false positive -# in our own code, or stuff that is so trivial it's not worth fixing -# -# 3. Suppressions for real chromium bugs that are not yet fixed. -# These should all be in chromium's bug tracking system (but a few aren't yet). -# Periodically we should sweep this file and the bug tracker clean by -# running overnight and removing outdated bugs/suppressions. -#----------------------------------------------------------------------- - -# 1. third party stuff we have no control over -############################ -# 1.1 Benign races in libc - -# A benign race inside the implementation of internal libc mutex -{ - Benign races in __lll_*lock_*_private - ThreadSanitizer:Race - fun:__lll_*lock_*_private -} - -# Benign races below thread-safe time-conversion functions -{ - fun:__tz* - ThreadSanitizer:Race - fun:__tz* -} -{ - fun:tzset* - ThreadSanitizer:Race - ... - fun:tzset* -} - -# Benign race in thread-safe function -{ - fun:mkstemp* - ThreadSanitizer:Race - ... - fun:mkstemp* -} - -# We already ignore memory accesses inside ld -# but we also need to ignore accesses below it. -{ - fun:_dl_close - ThreadSanitizer:Race - ... - fun:_dl_close -} - -# fprintf is thread-safe. The benign races happen on the internal lock. -{ - Benign race below fprintf (1) - ThreadSanitizer:Race - ... - fun:buffered_vfprintf - ... - fun:fprintf -} -{ - Benign race below fprintf (2) - ThreadSanitizer:Race - fun:new_do_write - fun:vfprintf -} - -{ - fun:timegm - ThreadSanitizer:Race - ... - fun:timegm -} - -{ - fun:mktime - ThreadSanitizer:Race - ... - fun:mktime -} - -# See crbug.com/84244 for benign races in nss. -{ - Benign race in nss (PR_EnterMonitor) - ThreadSanitizer:Race - fun:PR_EnterMonitor -} -{ - Benign race in nss (PR_ExitMonitor) - ThreadSanitizer:Race - fun:PR_ExitMonitor -} - -{ - False positive on strncasecmp OOB read - ThreadSanitizer:Race - fun:__strncasecmp_l_ssse3 - fun:base::strncasecmp -} -{ - False positive on strcasecmp OOB read - ThreadSanitizer:Race - fun:__strcasecmp_l_ssse3 - fun:base::strcasecmp -} - -{ - Benign race in get_nprocs, uses barriers - ThreadSanitizer:Race - fun:get_nprocs -} - -{ - False positives, glibc just uses internal atomics - ThreadSanitizer:Race - ... - fun:getaddrinfo -} - -############################ -# 1.2 Benign races in ICU -{ - Two writes, same value (ICU gGlobalMutex, gMutexesInUse) - ThreadSanitizer:Race - ... - fun:umtx_init_46 -} - -{ - Two writes, same value (ICU gHeapInUse) - ThreadSanitizer:Race - fun:uprv_malloc_46 -} - -# http://bugs.icu-project.org/trac/ticket/10295 -{ - Two writes, same value (ICU gLibCleanupFunctions[*]) - ThreadSanitizer:Race - fun:ucln_registerCleanup_46 -} - -# Reading a pointer to a mutex being initialized in a concurrent thread. -{ - A benign race in umtx_lock_46 - ThreadSanitizer:Race - fun:umtx_lock_46 -} - -############################ -# 1.3 Benign races in SQLLite -# TODO(timurrr|oshima): following four suppressions could be obsolete. -{ - Two writes, same value (SQLLite pthreadMutexAlloc) - ThreadSanitizer:Race - ... - fun:pthreadMutexAlloc -} - -{ - Two writes, same value (under sqlite3Malloc) - ThreadSanitizer:Race - ... - fun:sqlite3Malloc* -} - -{ - bug_84094_a (Could be benign. See bug for details) - ThreadSanitizer:Race - ... - fun:pcache1Fetch - fun:sqlite3PcacheFetch -} - -{ - bug_84094_b (Could be benign. See bug for details) - ThreadSanitizer:Race - fun:sqlite3StatusSet - fun:pcache1Alloc -} - -{ - bug_84094_c (Could be benign. See bug for details) - ThreadSanitizer:Race - ... - fun:pcache1Unpin - fun:pcacheUnpin - fun:sqlite3PcacheMakeClean - fun:sqlite3PcacheCleanAll -} - -############################ -# 1.4 Real races in third_party -{ - Nvidia GL driver destroys an invalid lock - ThreadSanitizer:InvalidLock - fun:pthread_mutex_destroy - obj:*nvidia*/libGL.so.* -} - -# http://code.google.com/p/v8/issues/detail?id=361 -{ - V8: race on Locker::active_ - ThreadSanitizer:Race - fun:v8::Locker::* -} - -{ - bug_23244 (libevent) - ThreadSanitizer:Race - fun:event_* - fun:event_* -} - -{ - bug_28396 (libevent) (1) - ThreadSanitizer:Race - fun:detect_monotonic - fun:event_base_new -} - -{ - bug_28396 (libevent) (2) - ThreadSanitizer:Race - fun:gettime - fun:event_base_loop -} - -{ - bug_28765 (tcmalloc) - ThreadSanitizer:Race - ... - fun:*tcmalloc*ThreadCache*DeleteCache* -} - -{ - bug_70938 - ThreadSanitizer:Race - ... - obj:*libdbus* -} - -{ - bug_84467a (Could be benign. See bug for details) - ThreadSanitizer:Race - fun:unixTempFileDir -} - -{ - bug_84467b - ThreadSanitizer:Race - fun:getenv - fun:unixTempFileDir -} - -{ - bug_84467c - ThreadSanitizer:Race - fun:__add_to_environ - fun:::EnvironmentImpl::SetVarImpl - fun:::EnvironmentImpl::SetVar -} - -{ - bug_84726_a - ThreadSanitizer:Race - fun:qsort_r - fun:qsort - fun:_xdg_mime_alias_read_from_file -} - -{ - bug_84726_b - ThreadSanitizer:Race - fun:qsort_r - fun:qsort - fun:_cairo_bentley_ottmann_tessellate_polygon -} - -{ - bug_177061 - ThreadSanitizer:Race - ... - fun:*cairo* -} - -# 2. intentional unit test errors, or stuff that is somehow a false positive -############################ -# 2.1 Data races in tests -{ - bug_30582 - ThreadSanitizer:Race - fun:*LongCallbackD* - fun:*WorkerThreadTickerTest_LongCallback_Test*TestBody* -} - -{ - bug_61731 - ThreadSanitizer:Race - fun:*Log* - ... - fun:*Worker* - ... - obj:*ipc_tests -} - -{ - bug_68481 [test-only race on bool] - ThreadSanitizer:Race - ... - fun:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup - fun:tracked_objects::TrackedObjectsTest_MinimalStartupShutdown_Test::* -} - -# TODO(timurrrr): bug item -{ - Data race on bool in AssertReporter [test-only] - ThreadSanitizer:Race - ... - fun:*AssertReporter*warn* -} - -# TODO(timurrrr): bug item -{ - Data race on WatchdogCounter [test-only] - ThreadSanitizer:Race - ... - fun:*WatchdogCounter*larm* -} - -# TODO(timurrrr): bug item -{ - Data race on counter in WorkQueue [test-only] - ThreadSanitizer:Race - ... - fun:*WorkQueue* -} - -# TODO(timurrrr): bug item -{ - Data race on vfptr in base/watchdog_unittest - ThreadSanitizer:Race - ... - fun:*WatchdogTest_*arm*Test_Test*TestBody* -} - -# TODO(timurrrr): bug item -{ - Data race on bool in chrome/browser/net/url_fetcher_unittest (1) - ThreadSanitizer:Race - fun:*URLFetcherCancelTest*TestContextReleased* -} -{ - Data race on bool in chrome/browser/net/url_fetcher_unittest (2) - ThreadSanitizer:Race - fun:*CancelTestURLRequestContext*CancelTestURLRequestContext* -} - -{ - ThreadSanitizer sanity test (ToolsSanityTest.DataRace) - ThreadSanitizer:Race - fun:*TOOLS_SANITY_TEST_CONCURRENT_THREAD::ThreadMain -} - -{ - Benign race (or even a false positive) on atomics in ThreadCollisionWarner - ThreadSanitizer:Race - fun:base::subtle::NoBarrier_Store - fun:base::ThreadCollisionWarner::Leave -} - -############################ -# 2.2 Benign races in Chromium -{ - bug_61179 [benign race on tracked_objects::Births] - ThreadSanitizer:Race - fun:tracked_objects::Births::*Birth* -} - -# 3. Suppressions for real chromium bugs that are not yet fixed. -############################ -# Real races in Chromium -{ - bug_24419 - ThreadSanitizer:Race - fun:*BrowserProcessImpl*nspector*iles* -} - -{ - bug_37496 - ThreadSanitizer:Race - ... - fun:*browser_sync*SyncShareIntercept*Observe* -} - -{ - bug_41314 - ThreadSanitizer:Race - ... - fun:base::LaunchApp* - fun:ChildProcessLauncher::Context::LaunchInternal* -} - -{ - bug_57266a - ThreadSanitizer:Race - ... - fun:*vp8*_* -} - -{ - bug_57266b - ThreadSanitizer:Race - ... - obj:*libffmpegsumo.* - fun:ThreadSanitizerStartThread -} - -{ - bug_57266c - ThreadSanitizer:Race - fun:thread_encoding_proc -} - -{ - bug_64075a - ThreadSanitizer:Race - fun:disk_cache::EntryImpl::GetDataSize* - fun:net::HttpCache::Transaction::* -} - -{ - bug_64075b - ThreadSanitizer:Race - fun:disk_cache::EntryImpl::UpdateSize* - ... - fun:disk_cache::EntryImpl::WriteDataImpl* -} -{ - bug_66835a - ThreadSanitizer:Race - fun:getenv - fun:::EnvironmentImpl::GetVarImpl - fun:::EnvironmentImpl::GetVar - fun:ShellIntegrationLinux::GetDesktopName - fun:::GetIsDefaultWebClient - fun:ShellIntegration::GetDefaultBrowser - fun:::RecordDefaultBrowserUMAStat - fun:base::internal::RunnableAdapter::Run -} -{ - bug_66835b - ThreadSanitizer:Race - fun:__add_to_environ - fun:g_setenv - ... - fun:giop_init - fun:CORBA_ORB_init - fun:gconf_orb_get - ... - fun:gconf_activate_server - ... - fun:gconf_engine_get_fuller - fun:gconf_engine_get_entry - ... - fun:GConfTitlebarListener::GConfTitlebarListener - fun:DefaultSingletonTraits::New - fun:Singleton::get - fun:GConfTitlebarListener::GetInstance - fun:BrowserTitlebar::Init - fun:BrowserWindowGtk::InitWidgets - fun:BrowserWindowGtk::Init - fun:BrowserWindow::CreateBrowserWindow - fun:::CreateBrowserWindow - fun:Browser::Browser - fun:StartupBrowserCreatorImpl::OpenTabsInBrowser - fun:StartupBrowserCreatorImpl::ProcessSpecifiedURLs - fun:StartupBrowserCreatorImpl::ProcessStartupURLs - fun:StartupBrowserCreatorImpl::ProcessLaunchURLs - fun:StartupBrowserCreatorImpl::Launch -} - -{ - bug_67957 - ThreadSanitizer:Race - fun:Replace_memcpy - fun:memcpy - fun:extensions::Serialize - fun:extensions::UserScriptMaster::ScriptReloader::RunLoad -} - -{ - bug_72548 - ThreadSanitizer:Race - ... - fun:JSC::Yarr::Interpreter::*Disjunction* - fun:JSC::Yarr::Interpreter::interpret* - fun:JSC::Yarr::interpret* -} - -{ - bug_86916 - ThreadSanitizer:Race - fun:loopfilter_frame - fun:loopfilter_thread -} - -{ - bug_89141 - ThreadSanitizer:Race - fun:base::Thread::message_loop - fun:content::BrowserThread::IsMessageLoopValid - fun:ThreadWatcherList::StartWatching - fun:ThreadWatcherList::InitializeAndStartWatching -} -{ - bug_93932_a - ThreadSanitizer:Race - ... - fun:avcodec_close - ... - fun:media::FFmpegVideoDecoder::* - ... - fun:media::FFmpegVideoDecode*Test::* -} -{ - bug_93932_b - ThreadSanitizer:Race - ... - fun:ff_thread_decode_frame - fun:avcodec_decode_video2 - ... - fun:media::FFmpegVideoDecoder::Decode* -} -{ - bug_93932_c - ThreadSanitizer:Race - fun:Replace_memcpy - fun:memcpy - fun:media::CopyPlane - ... - fun:media::FFmpegVideoDecoder::Decode* -} -{ - bug_93932_d - ThreadSanitizer:Race - fun:frame_worker_thread -} -{ - bug_93932_e - ThreadSanitizer:Race - fun:Replace_memcpy - fun:memcpy - fun:ff_thread_decode_frame - ... - fun:media::FFmpegVideoDecoder::Decode* -} -{ - bug_93932_f - ThreadSanitizer:Race - ... - fun:ff_thread_flush - ... - fun:media::FFmpegVideoDecoder::Reset -} -{ - bug_93932_g - ThreadSanitizer:Race - ... - fun:ff_frame_thread_free - ... - fun:avcodec_close -} -{ - bug_93932_h - ThreadSanitizer:Race - ... - fun:render_slice - fun:vp3_decode_frame - fun:frame_worker_thread -} -{ - bug_93932_i - ThreadSanitizer:Race - ... - fun:ff_thread_flush - ... - fun:media::FFmpegVideoDecoder::DoReset -} -{ - bug_93932_j - ThreadSanitizer:Race - ... - fun:base::MD5Update - fun:media::VideoFrame::HashFrameForTesting - fun:media::PipelineIntegrationTestBase::OnVideoRendererPaint -} -{ - bug_93932_k - ThreadSanitizer:Race - ... - fun:media::FFmpegVideoDecoder::Decode - fun:media::FFmpegVideoDecoder::DecodeBuffer - fun:media::FFmpegVideoDecoder::DoDecryptOrDecodeBuffer - fun:media::FFmpegVideoDecoder::DoDecryptOrDecodeBuffer -} -{ - bug_100020 - ThreadSanitizer:Race - fun:linked_ptr_internal::join - fun:linked_ptr::copy - ... - fun:HostContentSettingsMap::GetDefaultContentSetting -} -{ - bug_102327_a - ThreadSanitizer:Race - fun:tracked_objects::ThreadData::Initialize - fun:tracked_objects::ThreadData::InitializeThreadContext - fun:base::Thread::ThreadMain - fun:base::::ThreadFunc -} -{ - bug_102327_b - ThreadSanitizer:Race - ... - fun:tracked_objects::ThreadData::TallyABirthIfActive - fun:base::PosixDynamicThreadPool::PendingTask::PendingTask - fun:base::PosixDynamicThreadPool::WaitForTask - fun:base::::WorkerThread::ThreadMain - fun:base::::ThreadFunc -} -{ - bug_102327_c - ThreadSanitizer:Race - fun:tracked_objects::ThreadData::TrackingStatus -} -{ - bug_102327_d - ThreadSanitizer:Race - fun:tracked_objects::ThreadData::SnapshotMaps -} -{ - bug_102327_e - ThreadSanitizer:Race - fun:tracked_objects::Births::birth_count - fun:tracked_objects::ThreadData::SnapshotExecutedTasks -} -{ - bug_102327_f - ThreadSanitizer:Race - fun:tracked_objects::DeathData::RecordDeath -} -{ - bug_103711a - ThreadSanitizer:Race - fun:webrtc::Trace::SetLevelFilter -} -{ - bug_103711b - ThreadSanitizer:Race - fun:webrtc::TraceImpl::TraceCheck -} -{ - bug_103711c - ThreadSanitizer:Race - fun:webrtc::ThreadPosix::* -} -{ - bug_103711d - ThreadSanitizer:Race - fun:webrtc::FileWrapper*::* - ... - fun:webrtc::TraceImpl::StaticInstance - fun:webrtc::Trace::ReturnTrace - fun:webrtc::voe::SharedData::~SharedData - fun:webrtc::VoiceEngineImpl::~VoiceEngineImpl - ... - fun:webrtc::VoiceEngine::Delete - fun:WebRTCAutoDelete::reset - ... - fun:content::WebRTCAudioDeviceTest_Construct_Test::TestBody -} -{ - bug_103711e - ThreadSanitizer:Race - ... - fun:content::WebRTCAudioDeviceTest::OnMessageReceived - ... - fun:IPC::* - fun:IPC::Channel::ChannelImpl::OnFileCanReadWithoutBlocking - ... - fun:base::MessagePumpLibevent::FileDescriptorWatcher::OnFileCanReadWithoutBlocking - fun:base::MessagePumpLibevent::OnLibeventNotification - fun:event_process_active - fun:event_base_loop -} -{ - bug_103711f - ThreadSanitizer:Race - fun:webrtc::TracePosix::AddTime - fun:webrtc::TraceImpl::AddImpl - fun:webrtc::Trace::Add - fun:webrtc::ThreadPosix::Run -} -{ - bug_103711g - ThreadSanitizer:Race - fun:content::WebRTCAudioDeviceTest::SetUp -} -{ - bug_103711h - ThreadSanitizer:Race - fun:webrtc::EventWrapper::~EventWrapper - fun:webrtc::EventPosix::~EventPosix - fun:webrtc::ProcessThreadImpl::~ProcessThreadImpl - fun:webrtc::ProcessThread::DestroyProcessThread - fun:webrtc::voe::SharedData::~SharedData - fun:webrtc::VoiceEngineImpl::~VoiceEngineImpl - fun:webrtc::VoiceEngine::Delete - fun:WebRTCAutoDelete::reset - fun:WebRTCAutoDelete::~WebRTCAutoDelete - fun:content::WebRTCAudioDeviceTest_Construct_Test::TestBody -} -{ - bug_103711i - ThreadSanitizer:Race - fun:webrtc::ProcessThreadImpl::Process - fun:webrtc::ProcessThreadImpl::Run - fun:webrtc::ThreadPosix::Run - fun:StartThread -} -{ - bug_103711j - ThreadSanitizer:Race - fun:webrtc::ProcessThreadImpl::Stop - fun:webrtc::VoEBaseImpl::TerminateInternal - fun:webrtc::VoEBaseImpl::Terminate - fun:content::WebRTCAudioDeviceTest_PlayLocalFile_Test::TestBody -} -{ - bug_104769 - ThreadSanitizer:Race - fun:timeout_correct - fun:event_base_loop - fun:base::MessagePumpLibevent::Run - fun:base::MessageLoop::RunInternal - fun:base::MessageLoop::RunHandler -} -{ - bug_104776_maybe_benign - ThreadSanitizer:Race - fun:base::StatisticsRecorder::StatisticsRecorder - fun:::BrowserMainRunnerImpl::Initialize - fun:BrowserMain - fun:::RunNamedProcessTypeMain - fun:::ContentMainRunnerImpl::Run - fun:content::ContentMain - fun:ChromeMain - fun:main -} -{ - bug_106196 - ThreadSanitizer:Race - fun:tracked_objects::ThreadData::InitializeAndSetTrackingStatus - fun:*ChildThread::OnSetProfilerStatus - fun:DispatchToMethod -} -{ - bug_107903_a - ThreadSanitizer:Race - ... - fun:TestProfileSyncService::~TestProfileSyncService - fun:scoped_ptr::reset - fun:ProfileSyncServiceAutofillTest::TearDown -} -{ - bug_107903_b - ThreadSanitizer:Race - ... - fun:syncer::SyncManager::SyncInternal::ShutdownOnSyncThread - fun:syncer::SyncManager::ShutdownOnSyncThread - fun:browser_sync::SyncBackendHost::Core::DoShutdown - fun:base::internal::RunnableAdapter::Run -} -{ - bug_107903_c - ThreadSanitizer:Race - fun:syncable::DirectoryChangeDelegate::~DirectoryChangeDelegate - fun:syncer::SyncManager::SyncInternal::~SyncInternal - fun:syncer::SyncManager::~SyncManager - fun:scoped_ptr::reset - fun:browser_sync::SyncBackendHost::Core::DoShutdown - fun:base::internal::RunnableAdapter::Run -} -{ - bug_108408 - ThreadSanitizer:Race - fun:base::subtle::RefCountedBase::AddRef - fun:base::RefCounted::AddRef - fun:net::HttpCache::Transaction::DoCacheWriteData - fun:net::HttpCache::Transaction::DoLoop - fun:net::HttpCache::Transaction::ReadFromNetwork - fun:net::HttpCache::Transaction::Read - fun:net::URLRequestHttpJob::ReadRawData - fun:net::URLRequestJob::ReadRawDataHelper - fun:net::URLRequestJob::Read - fun:net::URLRequest::Read - fun:ResourceDispatcherHost::Read - fun:ResourceDispatcherHost::StartReading - fun:ResourceDispatcherHost::ResumeRequest - fun:base::internal::RunnableAdapter::Run -} -{ - bug_108539 - ThreadSanitizer:Race - fun:tracked_objects::ThreadData::InitializeAndSetTrackingStatus - fun:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup - fun:tracked_objects::TrackedObjectsTest::TrackedObjectsTest - fun:tracked_objects::TrackedObjectsTest_MinimalStartupShutdown_Test::TrackedObjectsTest_MinimalStartupShutdown_Test -} -{ - bug_112419 - ThreadSanitizer:Race - ... - fun:::OCSPTrySendAndReceive - fun:pkix_pl_Pk11CertStore_GetCRL - fun:pkix_CrlChecker_CheckExternal - fun:PKIX_RevocationChecker_Check - fun:pkix_CheckChain - fun:pkix_Build_ValidateEntireChain - fun:pkix_BuildForwardDepthFirstSearch - fun:pkix_Build_InitiateBuildChain - fun:PKIX_BuildChain - fun:CERT_PKIXVerifyCert - fun:net::::PKIXVerifyCert - fun:net::X509Certificate::VerifyInternal - fun:net::X509Certificate::Verify - fun:net::CertVerifierWorker::Run - fun:base::internal::RunnableAdapter::Run -} -{ - bug_113717 - ThreadSanitizer:Race - fun:std::swap - fun:content::RenderThreadImpl::Send - fun:content::RenderWidget::Send - fun:content::RenderViewImpl::Send - fun:content::RenderWidget::DoDeferredUpdate - fun:content::RenderWidget::DoDeferredUpdateAndSendInputAck - fun:content::RenderWidget::InvalidationCallback - fun:base::internal::RunnableAdapter::Run -} -{ - bug_115540 - ThreadSanitizer:Race - fun:base::Thread::message_loop - fun:content::BrowserThreadImpl::PostTaskHelper - fun:content::BrowserThread::PostTask - fun:AudioRendererHost::OnCreated - fun:media::AudioOutputController::DoCreate -} -{ - bug_116559 - ThreadSanitizer:Race - fun:logging::::LoggingTest_Dcheck_Test::TestBody - fun:testing::internal::HandleSehExceptionsInMethodIfSupported -} -{ - bug_118319_a - ThreadSanitizer:Race - fun:content::BrowserThreadImpl::~BrowserThreadImpl - fun:content::BrowserProcessSubThread::~BrowserProcessSubThread - fun:scoped_ptr::reset - fun:content::BrowserMainLoop::ShutdownThreadsAndCleanUp - fun:::BrowserMainRunnerImpl::Shutdown - fun:BrowserMain - fun:::RunNamedProcessTypeMain - fun:::ContentMainRunnerImpl::Run - fun:content::ContentMain - fun:ChromeMain - fun:main -} -{ - bug_118319_b - ThreadSanitizer:Race - fun:base::Thread::message_loop - fun:content::BrowserThreadImpl::PostTaskHelper - fun:content::BrowserThread::PostTask - fun:PluginLoaderPosix::GetPluginsToLoad - fun:base::internal::RunnableAdapter::Run -} -{ - bug_118319_c - ThreadSanitizer:Race - fun:base::Thread::ThreadMain - fun:base::::ThreadFunc -} -{ - bug_125928_a - ThreadSanitizer:Race - fun:__alloc_dir - fun:opendir - fun:g_dir_open - fun:pango_find_map - fun:itemize_state_process_run - fun:pango_itemize_with_base_dir - fun:pango_layout_check_lines - fun:pango_layout_get_unknown_glyphs_count - fun:find_invisible_char - fun:gtk_entry_init - fun:g_type_create_instance - fun:g_object_constructor - fun:g_object_newv - fun:g_object_new - ... - fun:ThemeServiceFactory::BuildServiceInstanceFor - fun:BrowserContextKeyedServiceFactory::GetServiceForBrowserContext - fun:ThemeServiceFactory::GetForProfile - fun:ExtensionService::GarbageCollectExtensions - fun:ExtensionService::InitAfterImport - fun:ExtensionService::Observe - fun:NotificationServiceImpl::Notify - fun:ProfileManager::OnImportFinished - fun:ChromeBrowserMainParts::PreMainMessageLoopRunImpl - fun:ChromeBrowserMainParts::PreMainMessageLoopRun - fun:content::BrowserMainLoop::CreateThreads - fun:::BrowserMainRunnerImpl::Initialize - fun:BrowserMain - fun:::RunNamedProcessTypeMain - fun:::ContentMainRunnerImpl::Run -} -{ - bug_125928_b - ThreadSanitizer:Race - fun:__alloc_dir - fun:opendir - fun:base::FileEnumerator::ReadDirectory - fun:base::FileEnumerator::Next - fun:::GetPrefsCandidateFilesFromFolder - fun:ExternalPrefLoader::ReadStandaloneExtensionPrefFiles - fun:ExternalPrefLoader::LoadOnFileThread - fun:base::internal::RunnableAdapter::Run -} -{ - bug_121574 - ThreadSanitizer:Race - fun:base::Thread::message_loop - fun:content::BrowserThreadImpl::PostTaskHelper - fun:content::BrowserThread::PostTask - fun:ProcessSingleton::LinuxWatcher::SocketReader::FinishWithACK - fun:ProcessSingleton::LinuxWatcher::HandleMessage - fun:base::internal::RunnableAdapter::Run -} -{ - bug_131001 - ThreadSanitizer:Race - ... - fun:media::AudioOutputMixer::StopStream - fun:media::AudioOutputProxy::Stop - fun:media::AudioOutputController::DoStopCloseAndClearStream - fun:media::AudioOutputController::DoClose - fun:base::internal::RunnableAdapter::Run -} -{ - bug_137701 - ThreadSanitizer:Race - ... - fun:_output_* - fun:_vsnprintf_helper -} -{ - bug_137973_a - ThreadSanitizer:Race - fun:media::Pipeline::OnVideoTimeUpdate - fun:base::internal::RunnableAdapter::Run -} -{ - bug_137973_b - ThreadSanitizer:Race - fun:media::Pipeline::SetState - fun:media::Pipeline::StopTask - fun:base::internal::RunnableAdapter::Run -} -{ - bug_137973_c - ThreadSanitizer:Race - fun:media::Pipeline::SetState - fun:media::Pipeline::SeekTask - fun:base::internal::RunnableAdapter::Run -} -{ - bug_144894 - ThreadSanitizer:Race - fun:av_parser_close - fun:avcodec_open2 - fun:avformat_find_stream_info - fun:media::FFmpegConfigHelper::SetupStreamConfigs - fun:media::FFmpegConfigHelper::Parse - fun:media::WebMStreamParser::ParseInfoAndTracks - fun:media::WebMStreamParser::Parse - fun:media::ChunkDemuxer::AppendData - fun:media::MockMediaSource::AppendAtTime - fun:media::PipelineIntegrationTest_MediaSource_ConfigChange_WebM_Test::TestBody -} -{ - bug_172292 - ThreadSanitizer:Race - fun:testing::internal::CmpHelperGE - fun:ThreadWatcherTest_MultipleThreadsResponding_Test::TestBody - fun:testing::internal::HandleSehExceptionsInMethodIfSupported -} -{ - bug_172297 - ThreadSanitizer:Race - fun:CustomThreadWatcher::UpdateState - fun:* - fun:base::internal::RunnableAdapter::Run -} -{ - bug_172306 - ThreadSanitizer:Race - fun:ThreadWatcher::OnPongMessage - fun:CustomThreadWatcher::OnPongMessage - fun:base::internal::RunnableAdapter::Run -} -{ - bug_175467 - ThreadSanitizer:Race - ... - fun:file_util::OpenFile - fun:visitedlink::VisitedLinkMaster::InitFromFile - fun:visitedlink::VisitedLinkMaster::InitFromFile - fun:visitedlink::VisitedLinkMaster::InitFromFile - fun:visitedlink::VisitedLinkMaster::Init - fun:visitedlink::VisitedLinkEventsTest::CreateBrowserContext - fun:content::RenderViewHostTestHarness::SetUp -} -{ - bug_178433a - ThreadSanitizer:Race - fun:scoped_refptr::operator-> - fun:base::WaitableEvent::Signal - fun:base::debug::TraceSamplingThread::ThreadMain - fun:base::::ThreadFunc -} -{ - bug_178433b - ThreadSanitizer:Race - fun:base::internal::scoped_ptr_impl::get - ... - fun:base::debug::TraceSamplingThread::ThreadMain -} -{ - bug_225123 - ThreadSanitizer:Race - fun:setlocale - ... - fun:gfx::GtkInitFromCommandLine -} -{ - bug_239350 - ThreadSanitizer:Race - fun:av_buffer_unref - fun:av_frame_unref - ... -} -{ - bug_256792 - ThreadSanitizer:Race - fun:media::AudioManagerAlsa::~AudioManagerAlsa - fun:content::MockAudioManager::~MockAudioManager - fun:content::MockAudioManager::~MockAudioManager - fun:base::DefaultDeleter* - fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl - fun:scoped_ptr::~scoped_ptr - fun:content::MediaStreamManagerTest::~MediaStreamManagerTest - fun:content::MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test::~MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test - fun:content::MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test::~MediaStreamManagerTest_MakeAndCancelMediaAccessRequest_Test - fun:testing::Test::DeleteSelf_ - fun:testing::internal::HandleSehExceptionsInMethodIfSupported -} -{ - bug_258935 - ThreadSanitizer:Race - fun:base::Thread::StopSoon - fun:base::Thread::Stop - fun:content::UtilityMainThread::~UtilityMainThread - fun:content::UtilityMainThread::~UtilityMainThread - fun:base::DefaultDeleter::operator* - fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl - fun:scoped_ptr::~scoped_ptr - fun:content::UtilityProcessHostImpl::~UtilityProcessHostImpl - fun:content::UtilityProcessHostImpl::~UtilityProcessHostImpl - fun:content::BrowserChildProcessHostImpl::OnChildDisconnected - fun:content::ChildProcessHostImpl::OnChannelError - fun:IPC::Channel::ChannelImpl::ClosePipeOnError - fun:IPC::Channel::ChannelImpl::OnFileCanReadWithoutBlocking - fun:base::MessagePumpLibevent::FileDescriptorWatcher::OnFileCanReadWithoutBlocking - fun:base::MessagePumpLibevent::OnLibeventNotification -} -{ - bug_268924_a - ThreadSanitizer:Race - fun:base::PowerMonitor::PowerMonitor - fun:content::ChildThread::Init - fun:content::ChildThread::ChildThread - fun:content::UtilityThreadImpl::UtilityThreadImpl -} -{ - bug_268924_b - ThreadSanitizer:Race - ... - fun:base::PowerMonitor::* - fun:content::PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster - fun:content::BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl - fun:content::BrowserChildProcessHostImpl::~BrowserChildProcessHostImpl -} -{ - bug_295418 - ThreadSanitizer:Race - ... - fun:testing::internal::UntypedFunctionMockerBase::UntypedInvokeWith - fun:testing::internal::FunctionMockerBase::InvokeWith - fun:testing::internal::FunctionMocker::Invoke - fun:content::::MockWebRtcAudioCapturerSink::CaptureData - fun:content::::MockWebRtcAudioCapturerSink::CaptureData - fun:content::WebRtcAudioCapturerSinkOwner::CaptureData - fun:content::WebRtcLocalAudioTrack::Capture - fun:content::WebRtcAudioCapturer::TrackOwner::Capture - fun:content::WebRtcAudioCapturer::Capture - fun:content::::FakeAudioThread::ThreadMain - fun:base::::ThreadFunc -} -{ - bug_313726 - ThreadSanitizer:Race - fun:MessageLoopHelper::TimerExpired - fun:base::internal::RunnableAdapter::Run -} diff --git a/chromium/tools/valgrind/tsan/suppressions_win32.txt b/chromium/tools/valgrind/tsan/suppressions_win32.txt deleted file mode 100644 index c6dea2da994..00000000000 --- a/chromium/tools/valgrind/tsan/suppressions_win32.txt +++ /dev/null @@ -1,321 +0,0 @@ -############################ -# Reports on the guts of Windows -{ - UuidCreate - ThreadSanitizer:Race - ... - fun:UuidCreate -} - -{ - ILFindLastID - ThreadSanitizer:Race - ... - fun:ILFindLastID -} - -{ - RpcServerUnregisterIf - ThreadSanitizer:Race - ... - fun:RpcServerUnregisterIf -} - -# http://code.google.com/p/data-race-test/issues/detail?id=45 -{ - accessing an invalid lock in unnamedImageEntryPoint - ThreadSanitizer:InvalidLock - fun:unnamedImageEntryPoint -} - -{ - accessing an invalid lock in CoFreeAllLibraries - ThreadSanitizer:InvalidLock - fun:CoFreeAllLibraries -} - -{ - bug_158099_mmdevice_endpoint_shutdown_too_fast - ThreadSanitizer:Race - fun:GetLocalIdFromEndpointId - ... -} - -############################ -# Chromium - -{ - Benign race durung InitializeClock - ThreadSanitizer:Race - ... - fun:*InitializeClock* -} - -{ - bug_62560 - ThreadSanitizer:Race - ... - fun:_initterm - fun:doexit -} - -{ - accessing an invalid lock under exit/doexit - ThreadSanitizer:InvalidLock - fun:*~Lock* - ... - fun:doexit - fun:exit -} -{ - bug_81793a - ThreadSanitizer:Race - ... - fun:NetTestSuite::InitializeTestThread -} -{ - bug_81793b - ThreadSanitizer:Race - ... - fun:base::MessageLoop::CalculateDelayedRuntime - fun:base::MessageLoop::Post*Task -} -{ - bug_93932a - ThreadSanitizer:Race - fun:avcodec_default_release_buffer - fun:ff_mpeg4video_split -} -{ - bug_93932b - ThreadSanitizer:Race - ... - fun:avcodec_close - fun:media::FFmpegVideoDecoder::ReleaseFFmpegResources -} -{ - bug_93932d - ThreadSanitizer:Race - fun:memcpy - fun:media::CopyPlane -} -{ - bug_93932e - ThreadSanitizer:Race - ... - fun:ff_thread_finish_setup - fun:ptw32_threadStart@4 -} -{ - bug_93932f - ThreadSanitizer:Race - ... - fun:ff_vp3_h_loop_filter_c - ... - fun:ff_thread_flush - fun:media::FFmpegVideoDecoder::Flush -} -{ - bug_93932g - ThreadSanitizer:Race - ... - fun:av_parser_close - ... - fun:BaseThreadInitThunk -} -{ - bug_93932h - ThreadSanitizer:Race - ... - fun:av_parser_close - ... - fun:base::internal::RunnableAdapter::Run -} -{ - bug_93932i - ThreadSanitizer:Race - fun:ff_simple_idct_add_mmx - ... - fun:BaseThreadInitThunk -} -{ - bug_144928_a - ThreadSanitizer:Race - fun:google_breakpad::CrashGenerationServer::Handle* - fun:google_breakpad::CrashGenerationServer::OnPipeConnected - fun:RtlSetTimer - fun:RtlSetTimer - fun:TpReleaseTimer - fun:TpReleaseTimer - fun:RtlMultiByteToUnicodeSize - fun:TpCallbackMayRunLong - fun:TpCallbackMayRunLong - fun:BaseThreadInitThunk -} -{ - bug_144928_b - ThreadSanitizer:Race - fun:google_breakpad::CrashGenerationServer::~CrashGenerationServer - fun:google_breakpad::CrashGenerationServer::`scalar deleting destructor' - fun:base::DefaultDeleter* - fun:base::internal::scoped_ptr_impl::~scoped_ptr_impl - fun:remoting::BreakpadWinDeathTest::~BreakpadWinDeathTest - fun:remoting::BreakpadWinDeathTest_TestAccessViolation_Test::`scalar deleting destructor' - fun:testing::Test::DeleteSelf_ - fun:testing::internal::HandleExceptionsInMethodIfSupported -} - -{ - bug_146119 - ThreadSanitizer:Race - ... - fun:GetAdaptersAddresses - ... - fun:base::internal::RunnableAdapter::Run -} - -{ - bug_157076_a - ThreadSanitizer:Race - fun:win32thread_worker - fun:_callthreadstartex - fun:_threadstartex - fun:BaseThreadInitThunk -} - -{ - bug_157076_b - ThreadSanitizer:Race - fun:memset - fun:_free_dbg_nolock - fun:_free_dbg - fun:_aligned_free_dbg - fun:_aligned_free -} - -{ - bug_157076_c - ThreadSanitizer:Race - fun:memset - fun:_heap_alloc_dbg_impl - fun:_nh_malloc_dbg_impl - fun:_nh_malloc_dbg - fun:_malloc_dbg - fun:_aligned_offset_malloc_dbg - fun:_aligned_malloc - fun:base::AlignedAlloc -} - -{ - bug_170334 - ThreadSanitizer:Race - ... - fun:net::NetworkChangeNotifierWinTest::~NetworkChangeNotifierWinTest -} - -{ - bug_239350 - ThreadSanitizer:Race - ... - fun:av_freep - fun:av_buffer_unref - fun:av_frame_unref - ... -} -{ - bug_287796 - ThreadSanitizer:Race - fun:ServerLicensingOpenW - fun:NdrPointerFree - fun:NdrPointerFree - fun:NdrPointerFree - fun:NdrPointerFree - fun:NdrPointerFree - fun:NdrUserMarshalMemorySize - fun:NdrPointerFree - fun:I_RpcReceive - fun:I_RpcReceive - fun:I_RpcReceive - fun:NdrRpcSsDefaultFree - fun:NdrRpcSsDefaultFree - fun:NdrOleFree - fun:NdrNonEncapsulatedUnionBufferSize - fun:NdrNonEncapsulatedUnionBufferSize -} -{ - bug_314654_a - ThreadSanitizer:Race - ... - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstance - fun:base::win::ScopedComPtr::CreateInstance - fun:media::CoreAudioUtil::CreateDeviceEnumerator -} -{ - bug_314654_b - ThreadSanitizer:Race - fun:.text - fun:.text - fun:CoSetState - fun:CoSetState - fun:CoGetComCatalog - fun:CoGetComCatalog - fun:CoGetComCatalog - fun:CoInitializeSecurity - fun:CoTaskMemFree - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstanceEx - fun:CoCreateInstance - fun:base::win::ScopedComPtr::CreateInstance -} -{ - bug_326282 - ThreadSanitizer:Race - ... - fun:file_util::OpenFile - fun:base::ReadFileToString -} -{ - bug_328521_a - ThreadSanitizer:Race - fun:PR_Lock - fun:pk11_getKeyFromList - fun:pk11_CreateSymKey - fun:pk11_ImportSymKeyWithTempl - fun:PK11_ImportSymKey - fun:crypto::HMAC::Init - fun:crypto::HMAC::Init - fun:crypto::HMAC::Init - fun:crypto::HMAC::Init - fun:remoting::protocol::AuthenticationMethod::ApplyHashFunction - fun:remoting::MakeHostPinHash - fun:`anonymous namespace'::VerifyGetPinHashResponse - fun:`anonymous namespace'::VerifyGetPinHashResponse - fun:`anonymous namespace'::VerifyGetPinHashResponse - fun:`anonymous namespace'::VerifyGetPinHashResponse - fun:remoting::NativeMessagingHostTest_All_Test::TestBody -} -{ - bug_328521_b - ThreadSanitizer:Race - fun:PR_Lock - fun:sftk_SessionFromHandle - fun:NSC_GenerateKeyPair - fun:PK11_GenerateKeyPairWithOpFlags - fun:PK11_GenerateKeyPairWithFlags - fun:PK11_GenerateKeyPair - fun:crypto::RSAPrivateKey::CreateWithParams - fun:crypto::RSAPrivateKey::CreateWithParams - fun:crypto::RSAPrivateKey::Create - fun:crypto::RSAPrivateKey::Create - fun:remoting::RsaKeyPair::Generate - fun:remoting::NativeMessagingHost::ProcessGenerateKeyPair - fun:remoting::NativeMessagingHost::ProcessMessage - fun:remoting::NativeMessagingHost::ProcessMessage - fun:base::internal::RunnableAdapter::Run -} diff --git a/chromium/tools/valgrind/tsan_analyze.py b/chromium/tools/valgrind/tsan_analyze.py deleted file mode 100755 index 2c744e23019..00000000000 --- a/chromium/tools/valgrind/tsan_analyze.py +++ /dev/null @@ -1,271 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# tsan_analyze.py - -''' Given a ThreadSanitizer output file, parses errors and uniques them.''' - -import gdb_helper - -from collections import defaultdict -import hashlib -import logging -import optparse -import os -import re -import subprocess -import sys -import time - -import common - -# Global symbol table (ugh) -TheAddressTable = None - -class _StackTraceLine(object): - def __init__(self, line, address, binary): - self.raw_line_ = line - self.address = address - self.binary = binary - def __str__(self): - global TheAddressTable - file, line = TheAddressTable.GetFileLine(self.binary, self.address) - if (file is None) or (line is None): - return self.raw_line_ - else: - return self.raw_line_.replace(self.binary, '%s:%s' % (file, line)) - -class TsanAnalyzer(object): - ''' Given a set of ThreadSanitizer output files, parse all the errors out of - them, unique them and output the results.''' - - LOAD_LIB_RE = re.compile('--[0-9]+-- ([^(:]*) \((0x[0-9a-f]+)\)') - TSAN_LINE_RE = re.compile('==[0-9]+==\s*[#0-9]+\s*' - '([0-9A-Fa-fx]+):' - '(?:[^ ]* )*' - '([^ :\n]+)' - '') - THREAD_CREATION_STR = ("INFO: T.* " - "(has been created by T.* at this point|is program's main thread)") - - SANITY_TEST_SUPPRESSION = ("ThreadSanitizer sanity test " - "(ToolsSanityTest.DataRace)") - TSAN_RACE_DESCRIPTION = "Possible data race" - TSAN_WARNING_DESCRIPTION = ("Unlocking a non-locked lock" - "|accessing an invalid lock" - "|which did not acquire this lock") - RACE_VERIFIER_LINE = "Confirmed a race|unexpected race" - TSAN_ASSERTION = "Assertion failed: " - - def __init__(self, use_gdb=False): - '''Reads in a set of files.''' - - self._use_gdb = use_gdb - self._cur_testcase = None - - def ReadLine(self): - self.line_ = self.cur_fd_.readline() - self.stack_trace_line_ = None - if not self._use_gdb: - return - global TheAddressTable - match = TsanAnalyzer.LOAD_LIB_RE.match(self.line_) - if match: - binary, ip = match.groups() - TheAddressTable.AddBinaryAt(binary, ip) - return - match = TsanAnalyzer.TSAN_LINE_RE.match(self.line_) - if match: - address, binary_name = match.groups() - stack_trace_line = _StackTraceLine(self.line_, address, binary_name) - TheAddressTable.Add(stack_trace_line.binary, stack_trace_line.address) - self.stack_trace_line_ = stack_trace_line - - def ReadSection(self): - """ Example of a section: - ==4528== WARNING: Possible data race: {{{ - ==4528== T20 (L{}): - ==4528== #0 MyTest::Foo1 - ==4528== #1 MyThread::ThreadBody - ==4528== Concurrent write happened at this point: - ==4528== T19 (L{}): - ==4528== #0 MyTest::Foo2 - ==4528== #1 MyThread::ThreadBody - ==4528== }}} - ------- suppression ------- - { - - ThreadSanitizer:Race - fun:MyTest::Foo1 - fun:MyThread::ThreadBody - } - ------- end suppression ------- - """ - result = [self.line_] - if re.search("{{{", self.line_): - while not re.search('}}}', self.line_): - self.ReadLine() - if self.stack_trace_line_ is None: - result.append(self.line_) - else: - result.append(self.stack_trace_line_) - self.ReadLine() - if re.match('-+ suppression -+', self.line_): - # We need to calculate the suppression hash and prepend a line like - # "Suppression (error hash=#0123456789ABCDEF#):" so the buildbot can - # extract the suppression snippet. - supp = "" - while not re.match('-+ end suppression -+', self.line_): - self.ReadLine() - supp += self.line_ - self.ReadLine() - if self._cur_testcase: - result.append("The report came from the `%s` test.\n" % \ - self._cur_testcase) - result.append("Suppression (error hash=#%016X#):\n" % \ - (int(hashlib.md5(supp).hexdigest()[:16], 16))) - result.append(" For more info on using suppressions see " - "http://dev.chromium.org/developers/how-tos/using-valgrind/threadsanitizer#TOC-Suppressing-data-races\n") - result.append(supp) - else: - self.ReadLine() - - return result - - def ReadTillTheEnd(self): - result = [self.line_] - while self.line_: - self.ReadLine() - result.append(self.line_) - return result - - def ParseReportFile(self, filename): - '''Parses a report file and returns a list of ThreadSanitizer reports. - - - Args: - filename: report filename. - Returns: - list of (list of (str iff self._use_gdb, _StackTraceLine otherwise)). - ''' - ret = [] - self.cur_fd_ = open(filename, 'r') - - while True: - # Read ThreadSanitizer reports. - self.ReadLine() - if not self.line_: - break - - while True: - tmp = [] - while re.search(TsanAnalyzer.RACE_VERIFIER_LINE, self.line_): - tmp.append(self.line_) - self.ReadLine() - while re.search(TsanAnalyzer.THREAD_CREATION_STR, self.line_): - tmp.extend(self.ReadSection()) - if re.search(TsanAnalyzer.TSAN_RACE_DESCRIPTION, self.line_): - tmp.extend(self.ReadSection()) - ret.append(tmp) # includes RaceVerifier and thread creation stacks - elif (re.search(TsanAnalyzer.TSAN_WARNING_DESCRIPTION, self.line_) and - not common.IsWindows()): # workaround for http://crbug.com/53198 - tmp.extend(self.ReadSection()) - ret.append(tmp) - else: - break - - tmp = [] - if re.search(TsanAnalyzer.TSAN_ASSERTION, self.line_): - tmp.extend(self.ReadTillTheEnd()) - ret.append(tmp) - break - - match = re.search("used_suppression:\s+([0-9]+)\s(.*)", self.line_) - if match: - count, supp_name = match.groups() - count = int(count) - self.used_suppressions[supp_name] += count - self.cur_fd_.close() - return ret - - def GetReports(self, files): - '''Extracts reports from a set of files. - - Reads a set of files and returns a list of all discovered - ThreadSanitizer race reports. As a side effect, populates - self.used_suppressions with appropriate info. - ''' - - global TheAddressTable - if self._use_gdb: - TheAddressTable = gdb_helper.AddressTable() - else: - TheAddressTable = None - reports = [] - self.used_suppressions = defaultdict(int) - for file in files: - reports.extend(self.ParseReportFile(file)) - if self._use_gdb: - TheAddressTable.ResolveAll() - # Make each line of each report a string. - reports = map(lambda(x): map(str, x), reports) - return [''.join(report_lines) for report_lines in reports] - - def Report(self, files, testcase, check_sanity=False): - '''Reads in a set of files and prints ThreadSanitizer report. - - Args: - files: A list of filenames. - check_sanity: if true, search for SANITY_TEST_SUPPRESSIONS - ''' - - # We set up _cur_testcase class-wide variable to avoid passing it through - # about 5 functions. - self._cur_testcase = testcase - reports = self.GetReports(files) - self._cur_testcase = None # just in case, shouldn't be used anymore - - common.PrintUsedSuppressionsList(self.used_suppressions) - - - retcode = 0 - if reports: - sys.stdout.flush() - sys.stderr.flush() - logging.info("FAIL! Found %i report(s)" % len(reports)) - for report in reports: - logging.info('\n' + report) - sys.stdout.flush() - retcode = -1 - - # Report tool's insanity even if there were errors. - if (check_sanity and - TsanAnalyzer.SANITY_TEST_SUPPRESSION not in self.used_suppressions): - logging.error("FAIL! Sanity check failed!") - retcode = -3 - - if retcode != 0: - return retcode - - logging.info("PASS: No reports found") - return 0 - - -def main(): - '''For testing only. The TsanAnalyzer class should be imported instead.''' - parser = optparse.OptionParser("usage: %prog ") - - (options, args) = parser.parse_args() - if not args: - parser.error("no filename specified") - filenames = args - - logging.getLogger().setLevel(logging.INFO) - analyzer = TsanAnalyzer(use_gdb=True) - return analyzer.Report(filenames, None) - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/valgrind/tsan_v2/ignores.txt b/chromium/tools/valgrind/tsan_v2/ignores.txt deleted file mode 100644 index 45d08bac602..00000000000 --- a/chromium/tools/valgrind/tsan_v2/ignores.txt +++ /dev/null @@ -1,12 +0,0 @@ -# The rules in this file are only applied at compile time. -# Because the Chrome buildsystem does not automatically touch the files -# mentioned here, changing this file requires clobbering all TSan v2 bots. -# -# Please think twice before you add or remove these rules. -# Data races should typically go to suppressions.txt. - -# See http://crbug.com/102327 -fun:*ThreadData*Initialize* - -# See http://crbug.com/172104 -fun:*v8*internal*ThreadEntry* diff --git a/chromium/tools/valgrind/tsan_v2/suppressions.txt b/chromium/tools/valgrind/tsan_v2/suppressions.txt deleted file mode 100644 index 656ecbaef37..00000000000 --- a/chromium/tools/valgrind/tsan_v2/suppressions.txt +++ /dev/null @@ -1,137 +0,0 @@ -# False positives in libflashplayer.so and libglib.so. Since we don't -# instrument them, we cannot reason about the synchronization in them. -race:libflashplayer.so -race:libglib*.so - -# Intentional race in ToolsSanityTest.DataRace in base_unittests. -race:base/tools_sanity_unittest.cc - -# Data race on WatchdogCounter [test-only] -race:base/threading/watchdog_unittest.cc - -# Races in libevent, http://crbug.com/23244 -race:libevent/event.c - -# http://crbug.com/46840 -race:base::HistogramSamples::IncreaseSum - -# http://crbug.com/84094 -race:sqlite3StatusSet -race:pcache1EnforceMaxPage -race:pcache1AllocPage - -# http://crbug.com/102327. -# Test-only race, won't fix. -race:tracked_objects::ThreadData::ShutdownSingleThreadedCleanup - -# http://crbug.com/115540 -race:*GetCurrentThreadIdentifier - -# http://crbug.com/120808 -race:base/threading/watchdog.cc - -# http://crbug.com/157586 -race:third_party/libvpx/source/libvpx/vp8/decoder/threading.c - -# http://crbug.com/158718 -race:third_party/ffmpeg/libavcodec/pthread.c -race:third_party/ffmpeg/libavcodec/pthread_frame.c -race:third_party/ffmpeg/libavcodec/vp8.c -race:third_party/ffmpeg/libavutil/mem.c -race:*HashFrameForTesting -race:third_party/ffmpeg/libavcodec/h264pred.c -race:media::ReleaseData - -# http://crbug.com/158922 -race:third_party/libvpx/source/libvpx/vp8/encoder/* - -# See http://crbug.com/181502 -race:_M_rep -race:_M_is_leaked - -# http://crbug.com/189177 -race:thread_manager -race:v8::Locker::Initialize - -# http://crbug.com/223352 -race:uprv_malloc_46 -race:uprv_realloc_46 - -# http://crbug.com/239359 -race:media::TestInputCallback::OnData - -# http://crbug.com/244368 -race:skia::BeginPlatformPaint - -# http://crbug.com/244385 -race:unixTempFileDir - -# http://crbug.com/244755 -race:v8::internal::Zone::NewExpand - -# http://crbug.com/244774 -race:webrtc::RTPReceiver::ProcessBitrate -race:webrtc::RTPSender::ProcessBitrate -race:webrtc::VideoCodingModuleImpl::Decode -race:webrtc::RTPSender::SendOutgoingData -race:webrtc::VP8EncoderImpl::GetEncodedPartitions -race:webrtc::VP8EncoderImpl::Encode -race:webrtc::ViEEncoder::DeliverFrame - -# http://crbug.com/244856 -race:AutoPulseLock - -# http://crbug.com/246968 -race:webrtc::VideoCodingModuleImpl::RegisterPacketRequestCallback - -# http://crbug.com/246970 -race:webrtc::EventPosix::StartTimer - -# http://crbug.com/246974 -race:content::GpuWatchdogThread::CheckArmed - -# http://crbug.com/257396 -race:base::debug::TraceEventTestFixture_TraceSamplingScope_Test::TestBody - -# http://crbug.com/257543 -race:*GetObjectFromEntryAddress - -# http://crbug.com/268924 -race:base::g_power_monitor -race:base::PowerMonitor::PowerMonitor -race:base::PowerMonitor::AddObserver - -# http://crbug.com/268941 -race:tracked_objects::ThreadData::tls_index_ - -# http://crbug.com/268946 -race:CommandLine::HasSwitch -race:CommandLine::current_process_commandline_ - -# http://crbug.com/270037 -race:gLibCleanupFunctions - -# http://crbug.com/272095 -race:base::g_top_manager - -# http://crbug.com/272987 -race:webrtc::MediaStreamTrack::set_enabled - -# http://crbug.com/273047 -race:base::*::g_lazy_tls_ptr -race:IPC::SyncChannel::ReceivedSyncMsgQueue::lazy_tls_ptr_ - -# http://crbug.com/280466 -race:content::WebRtcAudioCapturer::SetCapturerSource - -# http://crbug.com/290964 -race:PostponeInterruptsScope - -# http://crbug.com/296883 -race:net::URLFetcherCore::Stop - -# http://crbug.com/310851 -race:net::ProxyResolverV8Tracing::Job::~Job - -# http://crbug.com/313726 -race:CallbackWasCalled diff --git a/chromium/tools/valgrind/unused_suppressions.py b/chromium/tools/valgrind/unused_suppressions.py deleted file mode 100755 index 0f336f136d0..00000000000 --- a/chromium/tools/valgrind/unused_suppressions.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import sys -import urllib2 - -import suppressions - - -def main(): - supp = suppressions.GetSuppressions() - - all_supps = [] - for supps in supp.values(): - all_supps += [s.description for s in supps] - sys.stdout.write(urllib2.urlopen( - 'http://chromium-build-logs.appspot.com/unused_suppressions', - '\n'.join(all_supps)).read()) - return 0 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/chromium/tools/valgrind/valgrind.sh b/chromium/tools/valgrind/valgrind.sh deleted file mode 100755 index 4034c4bc2c3..00000000000 --- a/chromium/tools/valgrind/valgrind.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This is a small script for manually launching valgrind, along with passing -# it the suppression file, and some helpful arguments (automatically attaching -# the debugger on failures, etc). Run it from your repo root, something like: -# $ sh ./tools/valgrind/valgrind.sh ./out/Debug/chrome -# -# This is mostly intended for running the chrome browser interactively. -# To run unit tests, you probably want to run chrome_tests.sh instead. -# That's the script used by the valgrind buildbot. - -export THISDIR=`dirname $0` - -setup_memcheck() { - RUN_COMMAND="valgrind" - GDB=gdb - EXE_INFO=$(file $1) - if [[ $? -eq 0 ]]; then - # Prefer a gdb that matches the executable if it's available. - if [[ "$EXE_INFO" == *32-bit* && -x /usr/bin/gdb32 ]]; then - GDB="/usr/bin/gdb32"; - elif [[ "$EXE_INFO" == *64-bit* && -x /usr/bin/gdb64 ]]; then - GDB="/usr/bin/gdb64"; - fi - fi - - # Prompt to attach gdb when there was an error detected. - DEFAULT_TOOL_FLAGS=("--db-command=$GDB -nw %f %p" "--db-attach=yes" \ - # Keep the registers in gdb in sync with the code. - "--vex-iropt-register-updates=allregs-at-mem-access" \ - # Overwrite newly allocated or freed objects - # with 0x41 to catch inproper use. - "--malloc-fill=41" "--free-fill=41" \ - # Increase the size of stacks being tracked. - "--num-callers=30") -} - -setup_tsan() { - RUN_COMMAND="valgrind-tsan.sh" - IGNORE_FILE="$THISDIR/tsan/ignores.txt" - DEFAULT_TOOL_FLAGS=("--announce-threads" "--pure-happens-before=yes" \ - "--ignore=$IGNORE_FILE") -} - -setup_unknown() { - echo "Unknown tool \"$TOOL_NAME\" specified, the result is not guaranteed" - DEFAULT_TOOL_FLAGS=() -} - -set -e - -if [ $# -eq 0 ]; then - echo "usage: " - exit 1 -fi - -TOOL_NAME="memcheck" -declare -a DEFAULT_TOOL_FLAGS[0] - -# Select a tool different from memcheck with --tool=TOOL as a first argument -TMP_STR=`echo $1 | sed 's/^\-\-tool=//'` -if [ "$TMP_STR" != "$1" ]; then - TOOL_NAME="$TMP_STR" - shift -fi - -if echo "$@" | grep "\-\-tool" ; then - echo "--tool=TOOL must be the first argument" >&2 - exit 1 -fi - -case $TOOL_NAME in - memcheck*) setup_memcheck "$1";; - tsan*) setup_tsan;; - *) setup_unknown;; -esac - - -SUPPRESSIONS="$THISDIR/$TOOL_NAME/suppressions.txt" - -CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` -if [ "$CHROME_VALGRIND" = "" ] -then - # locate_valgrind.sh failed - exit 1 -fi -echo "Using valgrind binaries from ${CHROME_VALGRIND}" - -set -x -PATH="${CHROME_VALGRIND}/bin:$PATH" -# We need to set these variables to override default lib paths hard-coded into -# Valgrind binary. -export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind" -export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" - -# G_SLICE=always-malloc: make glib use system malloc -# NSS_DISABLE_UNLOAD=1: make nss skip dlclosing dynamically loaded modules, -# which would result in "obj:*" in backtraces. -# NSS_DISABLE_ARENA_FREE_LIST=1: make nss use system malloc -# G_DEBUG=fatal_warnings: make GTK abort on any critical or warning assertions. -# If it crashes on you in the Options menu, you hit bug 19751, -# comment out the G_DEBUG=fatal_warnings line. -# -# GTEST_DEATH_TEST_USE_FORK=1: make gtest death tests valgrind-friendly -# -# When everyone has the latest valgrind, we might want to add -# --show-possibly-lost=no -# to ignore possible but not definite leaks. - -G_SLICE=always-malloc \ -NSS_DISABLE_UNLOAD=1 \ -NSS_DISABLE_ARENA_FREE_LIST=1 \ -G_DEBUG=fatal_warnings \ -GTEST_DEATH_TEST_USE_FORK=1 \ -$RUN_COMMAND \ - --trace-children=yes \ - --leak-check=yes \ - --suppressions="$SUPPRESSIONS" \ - "${DEFAULT_TOOL_FLAGS[@]}" \ - "$@" diff --git a/chromium/tools/valgrind/valgrind_test.py b/chromium/tools/valgrind/valgrind_test.py deleted file mode 100644 index be96b9df654..00000000000 --- a/chromium/tools/valgrind/valgrind_test.py +++ /dev/null @@ -1,1235 +0,0 @@ -# Copyright (c) 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Runs an exe through Valgrind and puts the intermediate files in a -directory. -""" - -import datetime -import glob -import logging -import optparse -import os -import re -import shutil -import stat -import subprocess -import sys -import tempfile - -import common - -import drmemory_analyze -import memcheck_analyze -import tsan_analyze - -class BaseTool(object): - """Abstract class for running Valgrind-, PIN-based and other dynamic - error detector tools. - - Always subclass this and implement ToolCommand with framework- and - tool-specific stuff. - """ - - def __init__(self): - temp_parent_dir = None - self.log_parent_dir = "" - if common.IsWindows(): - # gpu process on Windows Vista+ runs at Low Integrity and can only - # write to certain directories (http://crbug.com/119131) - # - # TODO(bruening): if scripts die in middle and don't clean up temp - # dir, we'll accumulate files in profile dir. should remove - # really old files automatically. - profile = os.getenv("USERPROFILE") - if profile: - self.log_parent_dir = profile + "\\AppData\\LocalLow\\" - if os.path.exists(self.log_parent_dir): - self.log_parent_dir = common.NormalizeWindowsPath(self.log_parent_dir) - temp_parent_dir = self.log_parent_dir - # Generated every time (even when overridden) - self.temp_dir = tempfile.mkdtemp(prefix="vg_logs_", dir=temp_parent_dir) - self.log_dir = self.temp_dir # overridable by --keep_logs - self.option_parser_hooks = [] - # TODO(glider): we may not need some of the env vars on some of the - # platforms. - self._env = { - "G_SLICE" : "always-malloc", - "NSS_DISABLE_UNLOAD" : "1", - "NSS_DISABLE_ARENA_FREE_LIST" : "1", - "GTEST_DEATH_TEST_USE_FORK": "1", - } - - def ToolName(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def Analyze(self, check_sanity=False): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def RegisterOptionParserHook(self, hook): - # Frameworks and tools can add their own flags to the parser. - self.option_parser_hooks.append(hook) - - def CreateOptionParser(self): - # Defines Chromium-specific flags. - self._parser = optparse.OptionParser("usage: %prog [options] ") - self._parser.disable_interspersed_args() - self._parser.add_option("-t", "--timeout", - dest="timeout", metavar="TIMEOUT", default=10000, - help="timeout in seconds for the run (default 10000)") - self._parser.add_option("", "--build-dir", - help="the location of the compiler output") - self._parser.add_option("", "--source-dir", - help="path to top of source tree for this build" - "(used to normalize source paths in baseline)") - self._parser.add_option("", "--gtest_filter", default="", - help="which test case to run") - self._parser.add_option("", "--gtest_repeat", - help="how many times to run each test") - self._parser.add_option("", "--gtest_print_time", action="store_true", - default=False, - help="show how long each test takes") - self._parser.add_option("", "--ignore_exit_code", action="store_true", - default=False, - help="ignore exit code of the test " - "(e.g. test failures)") - self._parser.add_option("", "--keep_logs", action="store_true", - default=False, - help="store memory tool logs in the .logs " - "directory instead of /tmp.\nThis can be " - "useful for tool developers/maintainers.\n" - "Please note that the .logs directory " - "will be clobbered on tool startup.") - - # To add framework- or tool-specific flags, please add a hook using - # RegisterOptionParserHook in the corresponding subclass. - # See ValgrindTool and ThreadSanitizerBase for examples. - for hook in self.option_parser_hooks: - hook(self, self._parser) - - def ParseArgv(self, args): - self.CreateOptionParser() - - # self._tool_flags will store those tool flags which we don't parse - # manually in this script. - self._tool_flags = [] - known_args = [] - - """ We assume that the first argument not starting with "-" is a program - name and all the following flags should be passed to the program. - TODO(timurrrr): customize optparse instead - """ - while len(args) > 0 and args[0][:1] == "-": - arg = args[0] - if (arg == "--"): - break - if self._parser.has_option(arg.split("=")[0]): - known_args += [arg] - else: - self._tool_flags += [arg] - args = args[1:] - - if len(args) > 0: - known_args += args - - self._options, self._args = self._parser.parse_args(known_args) - - self._timeout = int(self._options.timeout) - self._source_dir = self._options.source_dir - if self._options.keep_logs: - # log_parent_dir has trailing slash if non-empty - self.log_dir = self.log_parent_dir + "%s.logs" % self.ToolName() - if os.path.exists(self.log_dir): - shutil.rmtree(self.log_dir) - os.mkdir(self.log_dir) - logging.info("Logs are in " + self.log_dir) - - self._ignore_exit_code = self._options.ignore_exit_code - if self._options.gtest_filter != "": - self._args.append("--gtest_filter=%s" % self._options.gtest_filter) - if self._options.gtest_repeat: - self._args.append("--gtest_repeat=%s" % self._options.gtest_repeat) - if self._options.gtest_print_time: - self._args.append("--gtest_print_time") - - return True - - def Setup(self, args): - return self.ParseArgv(args) - - def ToolCommand(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def Cleanup(self): - # You may override it in the tool-specific subclass - pass - - def Execute(self): - """ Execute the app to be tested after successful instrumentation. - Full execution command-line provided by subclassers via proc.""" - logging.info("starting execution...") - proc = self.ToolCommand() - for var in self._env: - common.PutEnvAndLog(var, self._env[var]) - return common.RunSubprocess(proc, self._timeout) - - def RunTestsAndAnalyze(self, check_sanity): - exec_retcode = self.Execute() - analyze_retcode = self.Analyze(check_sanity) - - if analyze_retcode: - logging.error("Analyze failed.") - logging.info("Search the log for '[ERROR]' to see the error reports.") - return analyze_retcode - - if exec_retcode: - if self._ignore_exit_code: - logging.info("Test execution failed, but the exit code is ignored.") - else: - logging.error("Test execution failed.") - return exec_retcode - else: - logging.info("Test execution completed successfully.") - - if not analyze_retcode: - logging.info("Analysis completed successfully.") - - return 0 - - def Main(self, args, check_sanity, min_runtime_in_seconds): - """Call this to run through the whole process: Setup, Execute, Analyze""" - start_time = datetime.datetime.now() - retcode = -1 - if self.Setup(args): - retcode = self.RunTestsAndAnalyze(check_sanity) - shutil.rmtree(self.temp_dir, ignore_errors=True) - self.Cleanup() - else: - logging.error("Setup failed") - end_time = datetime.datetime.now() - runtime_in_seconds = (end_time - start_time).seconds - hours = runtime_in_seconds / 3600 - seconds = runtime_in_seconds % 3600 - minutes = seconds / 60 - seconds = seconds % 60 - logging.info("elapsed time: %02d:%02d:%02d" % (hours, minutes, seconds)) - if (min_runtime_in_seconds > 0 and - runtime_in_seconds < min_runtime_in_seconds): - logging.error("Layout tests finished too quickly. " - "It should have taken at least %d seconds. " - "Something went wrong?" % min_runtime_in_seconds) - retcode = -1 - return retcode - - def Run(self, args, module, min_runtime_in_seconds=0): - MODULES_TO_SANITY_CHECK = ["base"] - - # TODO(timurrrr): this is a temporary workaround for http://crbug.com/47844 - if self.ToolName() == "tsan" and common.IsMac(): - MODULES_TO_SANITY_CHECK = [] - - check_sanity = module in MODULES_TO_SANITY_CHECK - return self.Main(args, check_sanity, min_runtime_in_seconds) - - -class ValgrindTool(BaseTool): - """Abstract class for running Valgrind tools. - - Always subclass this and implement ToolSpecificFlags() and - ExtendOptionParser() for tool-specific stuff. - """ - def __init__(self): - super(ValgrindTool, self).__init__() - self.RegisterOptionParserHook(ValgrindTool.ExtendOptionParser) - - def UseXML(self): - # Override if tool prefers nonxml output - return True - - def SelfContained(self): - # Returns true iff the tool is distibuted as a self-contained - # .sh script (e.g. ThreadSanitizer) - return False - - def ExtendOptionParser(self, parser): - parser.add_option("", "--suppressions", default=[], - action="append", - help="path to a valgrind suppression file") - parser.add_option("", "--indirect", action="store_true", - default=False, - help="set BROWSER_WRAPPER rather than " - "running valgrind directly") - parser.add_option("", "--indirect_webkit_layout", action="store_true", - default=False, - help="set --wrapper rather than running Dr. Memory " - "directly.") - parser.add_option("", "--trace_children", action="store_true", - default=False, - help="also trace child processes") - parser.add_option("", "--num-callers", - dest="num_callers", default=30, - help="number of callers to show in stack traces") - parser.add_option("", "--generate_dsym", action="store_true", - default=False, - help="Generate .dSYM file on Mac if needed. Slow!") - - def Setup(self, args): - if not BaseTool.Setup(self, args): - return False - if common.IsMac(): - self.PrepareForTestMac() - return True - - def PrepareForTestMac(self): - """Runs dsymutil if needed. - - Valgrind for Mac OS X requires that debugging information be in a .dSYM - bundle generated by dsymutil. It is not currently able to chase DWARF - data into .o files like gdb does, so executables without .dSYM bundles or - with the Chromium-specific "fake_dsym" bundles generated by - build/mac/strip_save_dsym won't give source file and line number - information in valgrind. - - This function will run dsymutil if the .dSYM bundle is missing or if - it looks like a fake_dsym. A non-fake dsym that already exists is assumed - to be up-to-date. - """ - test_command = self._args[0] - dsym_bundle = self._args[0] + '.dSYM' - dsym_file = os.path.join(dsym_bundle, 'Contents', 'Resources', 'DWARF', - os.path.basename(test_command)) - dsym_info_plist = os.path.join(dsym_bundle, 'Contents', 'Info.plist') - - needs_dsymutil = True - saved_test_command = None - - if os.path.exists(dsym_file) and os.path.exists(dsym_info_plist): - # Look for the special fake_dsym tag in dsym_info_plist. - dsym_info_plist_contents = open(dsym_info_plist).read() - - if not re.search('^\s*fake_dsym$', dsym_info_plist_contents, - re.MULTILINE): - # fake_dsym is not set, this is a real .dSYM bundle produced by - # dsymutil. dsymutil does not need to be run again. - needs_dsymutil = False - else: - # fake_dsym is set. dsym_file is a copy of the original test_command - # before it was stripped. Copy it back to test_command so that - # dsymutil has unstripped input to work with. Move the stripped - # test_command out of the way, it will be restored when this is - # done. - saved_test_command = test_command + '.stripped' - os.rename(test_command, saved_test_command) - shutil.copyfile(dsym_file, test_command) - shutil.copymode(saved_test_command, test_command) - - if needs_dsymutil: - if self._options.generate_dsym: - # Remove the .dSYM bundle if it exists. - shutil.rmtree(dsym_bundle, True) - - dsymutil_command = ['dsymutil', test_command] - - # dsymutil is crazy slow. Ideally we'd have a timeout here, - # but common.RunSubprocess' timeout is only checked - # after each line of output; dsymutil is silent - # until the end, and is then killed, which is silly. - common.RunSubprocess(dsymutil_command) - - if saved_test_command: - os.rename(saved_test_command, test_command) - else: - logging.info("No real .dSYM for test_command. Line numbers will " - "not be shown. Either tell xcode to generate .dSYM " - "file, or use --generate_dsym option to this tool.") - - def ToolCommand(self): - """Get the valgrind command to run.""" - # Note that self._args begins with the exe to be run. - tool_name = self.ToolName() - - # Construct the valgrind command. - if self.SelfContained(): - proc = ["valgrind-%s.sh" % tool_name] - else: - if 'CHROME_VALGRIND' in os.environ: - path = os.path.join(os.environ['CHROME_VALGRIND'], "bin", "valgrind") - else: - path = "valgrind" - proc = [path, "--tool=%s" % tool_name] - - proc += ["--num-callers=%i" % int(self._options.num_callers)] - - if self._options.trace_children: - proc += ["--trace-children=yes"] - proc += ["--trace-children-skip='*dbus-daemon*'"] - proc += ["--trace-children-skip='*dbus-launch*'"] - proc += ["--trace-children-skip='*perl*'"] - proc += ["--trace-children-skip='*python*'"] - # This is really Python, but for some reason Valgrind follows it. - proc += ["--trace-children-skip='*lsb_release*'"] - - proc += self.ToolSpecificFlags() - proc += self._tool_flags - - suppression_count = 0 - for suppression_file in self._options.suppressions: - if os.path.exists(suppression_file): - suppression_count += 1 - proc += ["--suppressions=%s" % suppression_file] - - if not suppression_count: - logging.warning("WARNING: NOT USING SUPPRESSIONS!") - - logfilename = self.log_dir + ("/%s." % tool_name) + "%p" - if self.UseXML(): - proc += ["--xml=yes", "--xml-file=" + logfilename] - else: - proc += ["--log-file=" + logfilename] - - # The Valgrind command is constructed. - - # Valgrind doesn't play nice with the Chrome sandbox. Empty this env var - # set by runtest.py to disable the sandbox. - if os.environ.get("CHROME_DEVEL_SANDBOX", None): - logging.info("Removing CHROME_DEVEL_SANDBOX fron environment") - os.environ["CHROME_DEVEL_SANDBOX"] = '' - - # Handle --indirect_webkit_layout separately. - if self._options.indirect_webkit_layout: - # Need to create the wrapper before modifying |proc|. - wrapper = self.CreateBrowserWrapper(proc, webkit=True) - proc = self._args - proc.append("--wrapper") - proc.append(wrapper) - return proc - - if self._options.indirect: - wrapper = self.CreateBrowserWrapper(proc) - os.environ["BROWSER_WRAPPER"] = wrapper - logging.info('export BROWSER_WRAPPER=' + wrapper) - proc = [] - proc += self._args - return proc - - def ToolSpecificFlags(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def CreateBrowserWrapper(self, proc, webkit=False): - """The program being run invokes Python or something else that can't stand - to be valgrinded, and also invokes the Chrome browser. In this case, use a - magic wrapper to only valgrind the Chrome browser. Build the wrapper here. - Returns the path to the wrapper. It's up to the caller to use the wrapper - appropriately. - """ - command = " ".join(proc) - # Add the PID of the browser wrapper to the logfile names so we can - # separate log files for different UI tests at the analyze stage. - command = command.replace("%p", "$$.%p") - - (fd, indirect_fname) = tempfile.mkstemp(dir=self.log_dir, - prefix="browser_wrapper.", - text=True) - f = os.fdopen(fd, "w") - f.write('#!/bin/bash\n' - 'echo "Started Valgrind wrapper for this test, PID=$$" >&2\n') - - f.write('DIR=`dirname $0`\n' - 'TESTNAME_FILE=$DIR/testcase.$$.name\n\n') - - if webkit: - # Webkit layout_tests pass the URL as the first line of stdin. - f.write('tee $TESTNAME_FILE | %s "$@"\n' % command) - else: - # Try to get the test case name by looking at the program arguments. - # i.e. Chromium ui_tests used --test-name arg. - # TODO(timurrrr): This doesn't handle "--test-name Test.Name" - # TODO(timurrrr): ui_tests are dead. Where do we use the non-webkit - # wrapper now? browser_tests? What do they do? - f.write('for arg in $@\ndo\n' - ' if [[ "$arg" =~ --test-name=(.*) ]]\n then\n' - ' echo ${BASH_REMATCH[1]} >$TESTNAME_FILE\n' - ' fi\n' - 'done\n\n' - '%s "$@"\n' % command) - - f.close() - os.chmod(indirect_fname, stat.S_IRUSR|stat.S_IXUSR) - return indirect_fname - - def CreateAnalyzer(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def GetAnalyzeResults(self, check_sanity=False): - # Glob all the files in the log directory - filenames = glob.glob(self.log_dir + "/" + self.ToolName() + ".*") - - # If we have browser wrapper, the logfiles are named as - # "toolname.wrapper_PID.valgrind_PID". - # Let's extract the list of wrapper_PIDs and name it ppids - ppids = set([int(f.split(".")[-2]) \ - for f in filenames if re.search("\.[0-9]+\.[0-9]+$", f)]) - - analyzer = self.CreateAnalyzer() - if len(ppids) == 0: - # Fast path - no browser wrapper was set. - return analyzer.Report(filenames, None, check_sanity) - - ret = 0 - for ppid in ppids: - testcase_name = None - try: - f = open(self.log_dir + ("/testcase.%d.name" % ppid)) - testcase_name = f.read().strip() - f.close() - wk_layout_prefix="third_party/WebKit/LayoutTests/" - wk_prefix_at = testcase_name.rfind(wk_layout_prefix) - if wk_prefix_at != -1: - testcase_name = testcase_name[wk_prefix_at + len(wk_layout_prefix):] - except IOError: - pass - print "=====================================================" - print " Below is the report for valgrind wrapper PID=%d." % ppid - if testcase_name: - print " It was used while running the `%s` test." % testcase_name - else: - print " You can find the corresponding test" - print " by searching the above log for 'PID=%d'" % ppid - sys.stdout.flush() - - ppid_filenames = [f for f in filenames \ - if re.search("\.%d\.[0-9]+$" % ppid, f)] - # check_sanity won't work with browser wrappers - assert check_sanity == False - ret |= analyzer.Report(ppid_filenames, testcase_name) - print "=====================================================" - sys.stdout.flush() - - if ret != 0: - print "" - print "The Valgrind reports are grouped by test names." - print "Each test has its PID printed in the log when the test was run" - print "and at the beginning of its Valgrind report." - print "Hint: you can search for the reports by Ctrl+F -> `=#`" - sys.stdout.flush() - - return ret - - -# TODO(timurrrr): Split into a separate file. -class Memcheck(ValgrindTool): - """Memcheck - Dynamic memory error detector for Linux & Mac - - http://valgrind.org/info/tools.html#memcheck - """ - - def __init__(self): - super(Memcheck, self).__init__() - self.RegisterOptionParserHook(Memcheck.ExtendOptionParser) - - def ToolName(self): - return "memcheck" - - def ExtendOptionParser(self, parser): - parser.add_option("--leak-check", "--leak_check", type="string", - default="yes", # --leak-check=yes is equivalent of =full - help="perform leak checking at the end of the run") - parser.add_option("", "--show_all_leaks", action="store_true", - default=False, - help="also show less blatant leaks") - parser.add_option("", "--track_origins", action="store_true", - default=False, - help="Show whence uninitialized bytes came. 30% slower.") - - def ToolSpecificFlags(self): - ret = ["--gen-suppressions=all", "--demangle=no"] - ret += ["--leak-check=%s" % self._options.leak_check] - - if self._options.show_all_leaks: - ret += ["--show-reachable=yes"] - else: - ret += ["--show-possibly-lost=no"] - - if self._options.track_origins: - ret += ["--track-origins=yes"] - - # TODO(glider): this is a temporary workaround for http://crbug.com/51716 - # Let's see whether it helps. - if common.IsMac(): - ret += ["--smc-check=all"] - - return ret - - def CreateAnalyzer(self): - use_gdb = common.IsMac() - return memcheck_analyze.MemcheckAnalyzer(self._source_dir, - self._options.show_all_leaks, - use_gdb=use_gdb) - - def Analyze(self, check_sanity=False): - ret = self.GetAnalyzeResults(check_sanity) - - if ret != 0: - logging.info("Please see http://dev.chromium.org/developers/how-tos/" - "using-valgrind for the info on Memcheck/Valgrind") - return ret - - -class PinTool(BaseTool): - """Abstract class for running PIN tools. - - Always subclass this and implement ToolSpecificFlags() and - ExtendOptionParser() for tool-specific stuff. - """ - def PrepareForTest(self): - pass - - def ToolSpecificFlags(self): - raise NotImplementedError, "This method should be implemented " \ - "in the tool-specific subclass" - - def ToolCommand(self): - """Get the PIN command to run.""" - - # Construct the PIN command. - pin_cmd = os.getenv("PIN_COMMAND") - if not pin_cmd: - raise RuntimeError, "Please set PIN_COMMAND environment variable " \ - "with the path to pin.exe" - proc = pin_cmd.split(" ") - - proc += self.ToolSpecificFlags() - - # The PIN command is constructed. - - # PIN requires -- to separate PIN flags from the executable name. - # self._args begins with the exe to be run. - proc += ["--"] - - proc += self._args - return proc - - -class ThreadSanitizerBase(object): - """ThreadSanitizer - Dynamic data race detector for Linux, Mac and Windows. - - http://code.google.com/p/data-race-test/wiki/ThreadSanitizer - - Since TSan works on both Valgrind (Linux, Mac) and PIN (Windows), we need - to have multiple inheritance - """ - - INFO_MESSAGE="Please see http://dev.chromium.org/developers/how-tos/" \ - "using-valgrind/threadsanitizer for the info on " \ - "ThreadSanitizer" - - def __init__(self): - super(ThreadSanitizerBase, self).__init__() - self.RegisterOptionParserHook(ThreadSanitizerBase.ExtendOptionParser) - - def ToolName(self): - return "tsan" - - def UseXML(self): - return False - - def SelfContained(self): - return True - - def ExtendOptionParser(self, parser): - parser.add_option("", "--hybrid", default="no", - dest="hybrid", - help="Finds more data races, may give false positive " - "reports unless the code is annotated") - parser.add_option("", "--announce-threads", default="yes", - dest="announce_threads", - help="Show the the stack traces of thread creation") - parser.add_option("", "--free-is-write", default="no", - dest="free_is_write", - help="Treat free()/operator delete as memory write. " - "This helps finding more data races, but (currently) " - "this may give false positive reports on std::string " - "internals, see http://code.google.com/p/data-race-test" - "/issues/detail?id=40") - - def EvalBoolFlag(self, flag_value): - if (flag_value in ["1", "true", "yes"]): - return True - elif (flag_value in ["0", "false", "no"]): - return False - raise RuntimeError, "Can't parse flag value (%s)" % flag_value - - def ToolSpecificFlags(self): - ret = [] - - ignore_files = ["ignores.txt"] - for platform_suffix in common.PlatformNames(): - ignore_files.append("ignores_%s.txt" % platform_suffix) - for ignore_file in ignore_files: - fullname = os.path.join(self._source_dir, - "tools", "valgrind", "tsan", ignore_file) - if os.path.exists(fullname): - fullname = common.NormalizeWindowsPath(fullname) - ret += ["--ignore=%s" % fullname] - - # This should shorten filepaths for local builds. - ret += ["--file-prefix-to-cut=%s/" % self._source_dir] - - # This should shorten filepaths on bots. - ret += ["--file-prefix-to-cut=build/src/"] - ret += ["--file-prefix-to-cut=out/Release/../../"] - - # This should shorten filepaths for functions intercepted in TSan. - ret += ["--file-prefix-to-cut=scripts/tsan/tsan/"] - ret += ["--file-prefix-to-cut=src/tsan/tsan/"] - - ret += ["--gen-suppressions=true"] - - if self.EvalBoolFlag(self._options.hybrid): - ret += ["--hybrid=yes"] # "no" is the default value for TSAN - - if self.EvalBoolFlag(self._options.announce_threads): - ret += ["--announce-threads"] - - if self.EvalBoolFlag(self._options.free_is_write): - ret += ["--free-is-write=yes"] - else: - ret += ["--free-is-write=no"] - - - # --show-pc flag is needed for parsing the error logs on Darwin. - if platform_suffix == 'mac': - ret += ["--show-pc=yes"] - ret += ["--show-pid=no"] - - boring_callers = common.BoringCallers(mangled=False, use_re_wildcards=False) - # TODO(timurrrr): In fact, we want "starting from .." instead of "below .." - for bc in boring_callers: - ret += ["--cut_stack_below=%s" % bc] - - return ret - - -class ThreadSanitizerPosix(ThreadSanitizerBase, ValgrindTool): - def ToolSpecificFlags(self): - proc = ThreadSanitizerBase.ToolSpecificFlags(self) - # The -v flag is needed for printing the list of used suppressions and - # obtaining addresses for loaded shared libraries on Mac. - proc += ["-v"] - return proc - - def CreateAnalyzer(self): - use_gdb = common.IsMac() - return tsan_analyze.TsanAnalyzer(use_gdb) - - def Analyze(self, check_sanity=False): - ret = self.GetAnalyzeResults(check_sanity) - - if ret != 0: - logging.info(self.INFO_MESSAGE) - return ret - - -class ThreadSanitizerWindows(ThreadSanitizerBase, PinTool): - - def __init__(self): - super(ThreadSanitizerWindows, self).__init__() - self.RegisterOptionParserHook(ThreadSanitizerWindows.ExtendOptionParser) - - def ExtendOptionParser(self, parser): - parser.add_option("", "--suppressions", default=[], - action="append", - help="path to TSan suppression file") - - - def ToolSpecificFlags(self): - add_env = { - "CHROME_ALLOCATOR" : "WINHEAP", - } - for k,v in add_env.iteritems(): - logging.info("export %s=%s", k, v) - os.putenv(k, v) - - proc = ThreadSanitizerBase.ToolSpecificFlags(self) - # On PIN, ThreadSanitizer has its own suppression mechanism - # and --log-file flag which work exactly on Valgrind. - suppression_count = 0 - for suppression_file in self._options.suppressions: - if os.path.exists(suppression_file): - suppression_count += 1 - suppression_file = common.NormalizeWindowsPath(suppression_file) - proc += ["--suppressions=%s" % suppression_file] - - if not suppression_count: - logging.warning("WARNING: NOT USING SUPPRESSIONS!") - - logfilename = self.log_dir + "/tsan.%p" - proc += ["--log-file=" + common.NormalizeWindowsPath(logfilename)] - - # TODO(timurrrr): Add flags for Valgrind trace children analog when we - # start running complex tests (e.g. UI) under TSan/Win. - - return proc - - def Analyze(self, check_sanity=False): - filenames = glob.glob(self.log_dir + "/tsan.*") - analyzer = tsan_analyze.TsanAnalyzer() - ret = analyzer.Report(filenames, None, check_sanity) - if ret != 0: - logging.info(self.INFO_MESSAGE) - return ret - - -class DrMemory(BaseTool): - """Dr.Memory - Dynamic memory error detector for Windows. - - http://dev.chromium.org/developers/how-tos/using-drmemory - It is not very mature at the moment, some things might not work properly. - """ - - def __init__(self, full_mode, pattern_mode): - super(DrMemory, self).__init__() - self.full_mode = full_mode - self.pattern_mode = pattern_mode - self.RegisterOptionParserHook(DrMemory.ExtendOptionParser) - - def ToolName(self): - return "drmemory" - - def ExtendOptionParser(self, parser): - parser.add_option("", "--suppressions", default=[], - action="append", - help="path to a drmemory suppression file") - parser.add_option("", "--follow_python", action="store_true", - default=False, dest="follow_python", - help="Monitor python child processes. If off, neither " - "python children nor any children of python children " - "will be monitored.") - parser.add_option("", "--indirect", action="store_true", - default=False, - help="set BROWSER_WRAPPER rather than " - "running Dr. Memory directly on the harness") - parser.add_option("", "--indirect_webkit_layout", action="store_true", - default=False, - help="set --wrapper rather than running valgrind " - "directly.") - parser.add_option("", "--use_debug", action="store_true", - default=False, dest="use_debug", - help="Run Dr. Memory debug build") - parser.add_option("", "--trace_children", action="store_true", - default=True, - help="TODO: default value differs from Valgrind") - - def ToolCommand(self): - """Get the tool command to run.""" - # WINHEAP is what Dr. Memory supports as there are issues w/ both - # jemalloc (http://code.google.com/p/drmemory/issues/detail?id=320) and - # tcmalloc (http://code.google.com/p/drmemory/issues/detail?id=314) - add_env = { - "CHROME_ALLOCATOR" : "WINHEAP", - "JSIMD_FORCEMMX" : "1", # http://code.google.com/p/drmemory/issues/detail?id=540 - } - for k,v in add_env.iteritems(): - logging.info("export %s=%s", k, v) - os.putenv(k, v) - - drmem_cmd = os.getenv("DRMEMORY_COMMAND") - if not drmem_cmd: - raise RuntimeError, "Please set DRMEMORY_COMMAND environment variable " \ - "with the path to drmemory.exe" - proc = drmem_cmd.split(" ") - - # By default, don't run python (this will exclude python's children as well) - # to reduce runtime. We're not really interested in spending time finding - # bugs in the python implementation. - # With file-based config we must update the file every time, and - # it will affect simultaneous drmem uses by this user. While file-based - # config has many advantages, here we may want this-instance-only - # (http://code.google.com/p/drmemory/issues/detail?id=334). - drconfig_cmd = [ proc[0].replace("drmemory.exe", "drconfig.exe") ] - drconfig_cmd += ["-quiet"] # suppress errors about no 64-bit libs - run_drconfig = True - if self._options.follow_python: - logging.info("Following python children") - # -unreg fails if not already registered so query for that first - query_cmd = drconfig_cmd + ["-isreg", "python.exe"] - query_proc = subprocess.Popen(query_cmd, stdout=subprocess.PIPE, - shell=True) - (query_out, query_err) = query_proc.communicate() - if re.search("exe not registered", query_out): - run_drconfig = False # all set - else: - drconfig_cmd += ["-unreg", "python.exe"] - else: - logging.info("Excluding python children") - drconfig_cmd += ["-reg", "python.exe", "-norun"] - if run_drconfig: - drconfig_retcode = common.RunSubprocess(drconfig_cmd, self._timeout) - if drconfig_retcode: - logging.error("Configuring whether to follow python children failed " \ - "with %d.", drconfig_retcode) - raise RuntimeError, "Configuring python children failed " - - suppression_count = 0 - supp_files = self._options.suppressions - if self.full_mode: - supp_files += [s.replace(".txt", "_full.txt") for s in supp_files] - for suppression_file in supp_files: - if os.path.exists(suppression_file): - suppression_count += 1 - proc += ["-suppress", common.NormalizeWindowsPath(suppression_file)] - - if not suppression_count: - logging.warning("WARNING: NOT USING SUPPRESSIONS!") - - # Un-comment to dump Dr.Memory events on error - #proc += ["-dr_ops", "-dumpcore_mask", "-dr_ops", "0x8bff"] - - # Un-comment and comment next line to debug Dr.Memory - #proc += ["-dr_ops", "-no_hide"] - #proc += ["-dr_ops", "-msgbox_mask", "-dr_ops", "15"] - #Proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "15"] - # Ensure we see messages about Dr. Memory crashing! - proc += ["-dr_ops", "-stderr_mask", "-dr_ops", "12"] - - if self._options.use_debug: - proc += ["-debug"] - - proc += ["-logdir", common.NormalizeWindowsPath(self.log_dir)] - - if self.log_parent_dir: - # gpu process on Windows Vista+ runs at Low Integrity and can only - # write to certain directories (http://crbug.com/119131) - symcache_dir = os.path.join(self.log_parent_dir, "drmemory.symcache") - elif self._options.build_dir: - # The other case is only possible with -t cmdline. - # Anyways, if we omit -symcache_dir the -logdir's value is used which - # should be fine. - symcache_dir = os.path.join(self._options.build_dir, "drmemory.symcache") - if symcache_dir: - if not os.path.exists(symcache_dir): - try: - os.mkdir(symcache_dir) - except OSError: - logging.warning("Can't create symcache dir?") - if os.path.exists(symcache_dir): - proc += ["-symcache_dir", common.NormalizeWindowsPath(symcache_dir)] - - # Use -no_summary to suppress DrMemory's summary and init-time - # notifications. We generate our own with drmemory_analyze.py. - proc += ["-batch", "-no_summary"] - - # Un-comment to disable interleaved output. Will also suppress error - # messages normally printed to stderr. - #proc += ["-quiet", "-no_results_to_stderr"] - - proc += ["-callstack_max_frames", "40"] - - # disable leak scan for now - proc += ["-no_count_leaks", "-no_leak_scan"] - - # make callstacks easier to read - proc += ["-callstack_srcfile_prefix", - "build\\src,chromium\\src,crt_build\\self_x86"] - proc += ["-callstack_modname_hide", - "*drmemory*,chrome.dll"] - - boring_callers = common.BoringCallers(mangled=False, use_re_wildcards=False) - # TODO(timurrrr): In fact, we want "starting from .." instead of "below .." - proc += ["-callstack_truncate_below", ",".join(boring_callers)] - - if self.pattern_mode: - proc += ["-pattern", "0xf1fd", "-no_count_leaks", "-redzone_size", "0x20"] - elif not self.full_mode: - proc += ["-light"] - - proc += self._tool_flags - - # DrM i#850/851: The new -callstack_use_top_fp_selectively has bugs. - proc += ["-no_callstack_use_top_fp_selectively"] - - # Dr.Memory requires -- to separate tool flags from the executable name. - proc += ["--"] - - if self._options.indirect or self._options.indirect_webkit_layout: - # TODO(timurrrr): reuse for TSan on Windows - wrapper_path = os.path.join(self._source_dir, - "tools", "valgrind", "browser_wrapper_win.py") - wrapper = " ".join(["python", wrapper_path] + proc) - self.CreateBrowserWrapper(wrapper) - logging.info("browser wrapper = " + " ".join(proc)) - if self._options.indirect_webkit_layout: - proc = self._args - # Layout tests want forward slashes. - wrapper = wrapper.replace('\\', '/') - proc += ["--wrapper", wrapper] - return proc - else: - proc = [] - - # Note that self._args begins with the name of the exe to be run. - self._args[0] = common.NormalizeWindowsPath(self._args[0]) - proc += self._args - return proc - - def CreateBrowserWrapper(self, command): - os.putenv("BROWSER_WRAPPER", command) - - def Analyze(self, check_sanity=False): - # Use one analyzer for all the log files to avoid printing duplicate reports - # - # TODO(timurrrr): unify this with Valgrind and other tools when we have - # http://code.google.com/p/drmemory/issues/detail?id=684 - analyzer = drmemory_analyze.DrMemoryAnalyzer() - - ret = 0 - if not self._options.indirect and not self._options.indirect_webkit_layout: - filenames = glob.glob(self.log_dir + "/*/results.txt") - - ret = analyzer.Report(filenames, None, check_sanity) - else: - testcases = glob.glob(self.log_dir + "/testcase.*.logs") - # If we have browser wrapper, the per-test logdirs are named as - # "testcase.wrapper_PID.name". - # Let's extract the list of wrapper_PIDs and name it ppids. - # NOTE: ppids may contain '_', i.e. they are not ints! - ppids = set([f.split(".")[-2] for f in testcases]) - - for ppid in ppids: - testcase_name = None - try: - f = open("%s/testcase.%s.name" % (self.log_dir, ppid)) - testcase_name = f.read().strip() - f.close() - except IOError: - pass - print "=====================================================" - print " Below is the report for drmemory wrapper PID=%s." % ppid - if testcase_name: - print " It was used while running the `%s` test." % testcase_name - else: - # TODO(timurrrr): hm, the PID line is suppressed on Windows... - print " You can find the corresponding test" - print " by searching the above log for 'PID=%s'" % ppid - sys.stdout.flush() - ppid_filenames = glob.glob("%s/testcase.%s.logs/*/results.txt" % - (self.log_dir, ppid)) - ret |= analyzer.Report(ppid_filenames, testcase_name, False) - print "=====================================================" - sys.stdout.flush() - - logging.info("Please see http://dev.chromium.org/developers/how-tos/" - "using-drmemory for the info on Dr. Memory") - return ret - - -# RaceVerifier support. See -# http://code.google.com/p/data-race-test/wiki/RaceVerifier for more details. -class ThreadSanitizerRV1Analyzer(tsan_analyze.TsanAnalyzer): - """ TsanAnalyzer that saves race reports to a file. """ - - TMP_FILE = "rvlog.tmp" - - def __init__(self, source_dir, use_gdb): - super(ThreadSanitizerRV1Analyzer, self).__init__(use_gdb) - self.out = open(self.TMP_FILE, "w") - - def Report(self, files, testcase, check_sanity=False): - reports = self.GetReports(files) - for report in reports: - print >>self.out, report - if len(reports) > 0: - logging.info("RaceVerifier pass 1 of 2, found %i reports" % len(reports)) - return -1 - return 0 - - def CloseOutputFile(self): - self.out.close() - - -class ThreadSanitizerRV1Mixin(object): - """RaceVerifier first pass. - - Runs ThreadSanitizer as usual, but hides race reports and collects them in a - temporary file""" - - def __init__(self): - super(ThreadSanitizerRV1Mixin, self).__init__() - self.RegisterOptionParserHook(ThreadSanitizerRV1Mixin.ExtendOptionParser) - - def ExtendOptionParser(self, parser): - parser.set_defaults(hybrid="yes") - - def CreateAnalyzer(self): - use_gdb = common.IsMac() - self.analyzer = ThreadSanitizerRV1Analyzer(self._source_dir, use_gdb) - return self.analyzer - - def Cleanup(self): - super(ThreadSanitizerRV1Mixin, self).Cleanup() - self.analyzer.CloseOutputFile() - - -class ThreadSanitizerRV2Mixin(object): - """RaceVerifier second pass.""" - - def __init__(self): - super(ThreadSanitizerRV2Mixin, self).__init__() - self.RegisterOptionParserHook(ThreadSanitizerRV2Mixin.ExtendOptionParser) - - def ExtendOptionParser(self, parser): - parser.add_option("", "--race-verifier-sleep-ms", - dest="race_verifier_sleep_ms", default=10, - help="duration of RaceVerifier delays") - - def ToolSpecificFlags(self): - proc = super(ThreadSanitizerRV2Mixin, self).ToolSpecificFlags() - proc += ['--race-verifier=%s' % ThreadSanitizerRV1Analyzer.TMP_FILE, - '--race-verifier-sleep-ms=%d' % - int(self._options.race_verifier_sleep_ms)] - return proc - - def Cleanup(self): - super(ThreadSanitizerRV2Mixin, self).Cleanup() - os.unlink(ThreadSanitizerRV1Analyzer.TMP_FILE) - - -class ThreadSanitizerRV1Posix(ThreadSanitizerRV1Mixin, ThreadSanitizerPosix): - pass - - -class ThreadSanitizerRV2Posix(ThreadSanitizerRV2Mixin, ThreadSanitizerPosix): - pass - - -class ThreadSanitizerRV1Windows(ThreadSanitizerRV1Mixin, - ThreadSanitizerWindows): - pass - - -class ThreadSanitizerRV2Windows(ThreadSanitizerRV2Mixin, - ThreadSanitizerWindows): - pass - - -class RaceVerifier(object): - """Runs tests under RaceVerifier/Valgrind.""" - - MORE_INFO_URL = "http://code.google.com/p/data-race-test/wiki/RaceVerifier" - - def RV1Factory(self): - if common.IsWindows(): - return ThreadSanitizerRV1Windows() - else: - return ThreadSanitizerRV1Posix() - - def RV2Factory(self): - if common.IsWindows(): - return ThreadSanitizerRV2Windows() - else: - return ThreadSanitizerRV2Posix() - - def ToolName(self): - return "tsan" - - def Main(self, args, check_sanity, min_runtime_in_seconds): - logging.info("Running a TSan + RaceVerifier test. For more information, " + - "see " + self.MORE_INFO_URL) - cmd1 = self.RV1Factory() - ret = cmd1.Main(args, check_sanity, min_runtime_in_seconds) - # Verify race reports, if there are any. - if ret == -1: - logging.info("Starting pass 2 of 2. Running the same binary in " + - "RaceVerifier mode to confirm possible race reports.") - logging.info("For more information, see " + self.MORE_INFO_URL) - cmd2 = self.RV2Factory() - ret = cmd2.Main(args, check_sanity, min_runtime_in_seconds) - else: - logging.info("No reports, skipping RaceVerifier second pass") - logging.info("Please see " + self.MORE_INFO_URL + " for more information " + - "on RaceVerifier") - return ret - - def Run(self, args, module, min_runtime_in_seconds=0): - return self.Main(args, False, min_runtime_in_seconds) - - -class EmbeddedTool(BaseTool): - """Abstract class for tools embedded directly into the test binary. - """ - # TODO(glider): need to override Execute() and support process chaining here. - - def ToolCommand(self): - # In the simplest case just the args of the script. - return self._args - - -class Asan(EmbeddedTool): - """AddressSanitizer, a memory error detector. - - More information at - http://dev.chromium.org/developers/testing/addresssanitizer - """ - def __init__(self): - super(Asan, self).__init__() - self._timeout = 1200 - if common.IsMac(): - self._env["DYLD_NO_PIE"] = "1" - - - def ToolName(self): - return "asan" - - def ToolCommand(self): - # TODO(glider): use pipes instead of the ugly wrapper here once they - # are supported. - procs = [os.path.join(self._source_dir, "tools", "valgrind", - "asan", "asan_wrapper.sh")] - procs.extend(self._args) - return procs - - def Analyze(sels, unused_check_sanity): - return 0 - - -class ToolFactory: - def Create(self, tool_name): - if tool_name == "memcheck": - return Memcheck() - if tool_name == "tsan": - if common.IsWindows(): - return ThreadSanitizerWindows() - else: - return ThreadSanitizerPosix() - if tool_name == "drmemory" or tool_name == "drmemory_light": - # TODO(timurrrr): remove support for "drmemory" when buildbots are - # switched to drmemory_light OR make drmemory==drmemory_full the default - # mode when the tool is mature enough. - return DrMemory(False, False) - if tool_name == "drmemory_full": - return DrMemory(True, False) - if tool_name == "drmemory_pattern": - return DrMemory(False, True) - if tool_name == "tsan_rv": - return RaceVerifier() - if tool_name == "asan": - return Asan() - try: - platform_name = common.PlatformNames()[0] - except common.NotImplementedError: - platform_name = sys.platform + "(Unknown)" - raise RuntimeError, "Unknown tool (tool=%s, platform=%s)" % (tool_name, - platform_name) - -def CreateTool(tool): - return ToolFactory().Create(tool) diff --git a/chromium/tools/valgrind/waterfall.sh b/chromium/tools/valgrind/waterfall.sh deleted file mode 100755 index bce3e637b0f..00000000000 --- a/chromium/tools/valgrind/waterfall.sh +++ /dev/null @@ -1,222 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2011 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This script can be used by waterfall sheriffs to fetch the status -# of Valgrind bots on the memory waterfall and test if their local -# suppressions match the reports on the waterfall. - -set -e - -THISDIR=$(dirname "${0}") -LOGS_DIR=$THISDIR/waterfall.tmp -WATERFALL_PAGE="http://build.chromium.org/p/chromium.memory/builders" -WATERFALL_FYI_PAGE="http://build.chromium.org/p/chromium.memory.fyi/builders" - -download() { - # Download a file. - # $1 = URL to download - # $2 = Path to the output file - # {{{1 - if [ "$(which curl)" != "" ] - then - if ! curl -s -o "$2" "$1" - then - echo - echo "Failed to download '$1'... aborting" - exit 1 - fi - elif [ "$(which wget)" != "" ] - then - if ! wget "$1" -O "$2" -q - then - echo - echo "Failed to download '$1'... aborting" - exit 1 - fi - else - echo "Need either curl or wget to download stuff... aborting" - exit 1 - fi - # }}} -} - -fetch_logs() { - # Fetch Valgrind logs from the waterfall {{{1 - - # TODO(timurrrr,maruel): use JSON, see - # http://build.chromium.org/p/chromium.memory/json/help - - rm -rf "$LOGS_DIR" # Delete old logs - mkdir "$LOGS_DIR" - - echo "Fetching the list of builders..." - download $1 "$LOGS_DIR/builders" - SLAVES=$(grep " to make it possible - # to find the failed builds. - LIST_OF_BUILDS=$(cat "$LOGS_DIR/slave_$S" | \ - awk 'BEGIN { buf = "" } - { - if ($0 ~ /<\/td>/) { buf = (buf $0); } - else { - if (buf) { print buf; buf="" } - print $0 - } - } - END {if (buf) print buf}' | \ - grep "success\|failure" | \ - head -n $NUMBUILDS | \ - grep "failure" | \ - grep -v "failed compile" | \ - sed "s/.*\/builds\///" | sed "s/\".*//") - - for BUILD in $LIST_OF_BUILDS - do - # We'll fetch a few tiny URLs now, let's use a temp file. - TMPFILE=$(mktemp -t memory_waterfall.XXXXXX) - download $SLAVE_URL/builds/$BUILD "$TMPFILE" - - REPORT_FILE="$LOGS_DIR/report_${S}_${BUILD}" - rm -f $REPORT_FILE 2>/dev/null || true # make sure it doesn't exist - - REPORT_URLS=$(grep -o "[0-9]\+/steps/\(memory\|heapcheck\).*/logs/[0-9A-F]\{16\}" \ - "$TMPFILE" \ - || true) # `true` is to succeed on empty output - FAILED_TESTS=$(grep -o "[0-9]\+/steps/\(memory\|heapcheck\).*/logs/[A-Za-z0-9_.]\+" \ - "$TMPFILE" | grep -v "[0-9A-F]\{16\}" \ - | grep -v "stdio" || true) - - for REPORT in $REPORT_URLS - do - download "$SLAVE_URL/builds/$REPORT/text" "$TMPFILE" - echo "" >> "$TMPFILE" # Add a newline at the end - cat "$TMPFILE" | tr -d '\r' >> "$REPORT_FILE" - done - - for FAILURE in $FAILED_TESTS - do - echo -n "FAILED:" >> "$REPORT_FILE" - echo "$FAILURE" | sed -e "s/.*\/logs\///" -e "s/\/.*//" \ - >> "$REPORT_FILE" - done - - rm "$TMPFILE" - echo $SLAVE_URL/builds/$BUILD >> "$REPORT_FILE" - done - echo " DONE" - done - # }}} -} - -match_suppressions() { - PYTHONPATH=$THISDIR/../python/google \ - python "$THISDIR/test_suppressions.py" $@ "$LOGS_DIR/report_"* -} - -match_gtest_excludes() { - for PLATFORM in "Linux" "Chromium%20Mac" "Chromium%20OS" - do - echo - echo "Test failures on ${PLATFORM}:" | sed "s/%20/ /" - grep -h -o "^FAILED:.*" -R "$LOGS_DIR"/*${PLATFORM}* | \ - grep -v "FAILS\|FLAKY" | sort | uniq | \ - sed -e "s/^FAILED://" -e "s/^/ /" - # Don't put any operators between "grep | sed" and "RESULT=$PIPESTATUS" - RESULT=$PIPESTATUS - - if [ "$RESULT" == 1 ] - then - echo " None!" - else - echo - echo " Note: we don't check for failures already excluded locally yet" - echo " TODO(timurrrr): don't list tests we've already excluded locally" - fi - done - echo - echo "Note: we don't print FAILS/FLAKY tests and 1200s-timeout failures" -} - -usage() { - cat </src/tools/vim/chromium.ycm_extra_conf.py' -# -# 3. Profit -# -# -# Usage notes: -# -# * You must use ninja & clang to build Chromium. -# -# * You must have run gyp_chromium and built Chromium recently. -# -# -# Hacking notes: -# -# * The purpose of this script is to construct an accurate enough command line -# for YCM to pass to clang so it can build and extract the symbols. -# -# * Right now, we only pull the -I and -D flags. That seems to be sufficient -# for everything I've used it for. -# -# * That whole ninja & clang thing? We could support other configs if someone -# were willing to write the correct commands and a parser. -# -# * This has only been tested on gPrecise. - - -import os -import subprocess - - -# Flags from YCM's default config. -flags = [ -'-DUSE_CLANG_COMPLETER', -'-std=c++11', -'-x', -'c++', -] - - -def PathExists(*args): - return os.path.exists(os.path.join(*args)) - - -def FindChromeSrcFromFilename(filename): - """Searches for the root of the Chromium checkout. - - Simply checks parent directories until it finds .gclient and src/. - - Args: - filename: (String) Path to source file being edited. - - Returns: - (String) Path of 'src/', or None if unable to find. - """ - curdir = os.path.normpath(os.path.dirname(filename)) - while not (PathExists(curdir, 'src') and PathExists(curdir, 'src', 'DEPS') - and (PathExists(curdir, '.gclient') - or PathExists(curdir, 'src', '.git'))): - nextdir = os.path.normpath(os.path.join(curdir, '..')) - if nextdir == curdir: - return None - curdir = nextdir - return os.path.join(curdir, 'src') - - -# Largely copied from ninja-build.vim (guess_configuration) -def GetNinjaOutputDirectory(chrome_root): - """Returns either /out/Release or /out/Debug. - - The configuration chosen is the one most recently generated/built.""" - root = os.path.join(chrome_root, 'out') - debug_path = os.path.join(root, 'Debug') - release_path = os.path.join(root, 'Release') - - def is_release_15s_newer(test_path): - try: - debug_mtime = os.path.getmtime(os.path.join(debug_path, test_path)) - except os.error: - debug_mtime = 0 - try: - rel_mtime = os.path.getmtime(os.path.join(release_path, test_path)) - except os.error: - rel_mtime = 0 - return rel_mtime - debug_mtime >= 15 - - if is_release_15s_newer('build.ninja') or is_release_15s_newer('protoc'): - return release_path - return debug_path - - -def GetClangCommandFromNinjaForFilename(chrome_root, filename): - """Returns the command line to build |filename|. - - Asks ninja how it would build the source file. If the specified file is a - header, tries to find its companion source file first. - - Args: - chrome_root: (String) Path to src/. - filename: (String) Path to source file being edited. - - Returns: - (List of Strings) Command line arguments for clang. - """ - if not chrome_root: - return [] - - # Generally, everyone benefits from including Chromium's src/, because all of - # Chromium's includes are relative to that. - chrome_flags = ['-I' + os.path.join(chrome_root)] - - # Header files can't be built. Instead, try to match a header file to its - # corresponding source file. - if filename.endswith('.h'): - alternates = ['.cc', '.cpp'] - for alt_extension in alternates: - alt_name = filename[:-2] + alt_extension - if os.path.exists(alt_name): - filename = alt_name - break - else: - # If this is a standalone .h file with no source, the best we can do is - # try to use the default flags. - return chrome_flags - - # Ninja needs the path to the source file from the output build directory. - # Cut off the common part and /. - subdir_filename = filename[len(chrome_root)+1:] - rel_filename = os.path.join('..', '..', subdir_filename) - - out_dir = GetNinjaOutputDirectory(chrome_root) - - # Ask ninja how it would build our source file. - p = subprocess.Popen(['ninja', '-v', '-C', out_dir, '-t', - 'commands', rel_filename + '^'], - stdout=subprocess.PIPE) - stdout, stderr = p.communicate() - if p.returncode: - return chrome_flags - - # Ninja might execute several commands to build something. We want the last - # clang command. - clang_line = None - for line in reversed(stdout.split('\n')): - if 'clang' in line: - clang_line = line - break - else: - return chrome_flags - - # Parse out the -I and -D flags. These seem to be the only ones that are - # important for YCM's purposes. - for flag in clang_line.split(' '): - if flag.startswith('-I'): - # Relative paths need to be resolved, because they're relative to the - # output dir, not the source. - if flag[2] == '/': - chrome_flags.append(flag) - else: - abs_path = os.path.normpath(os.path.join(out_dir, flag[2:])) - chrome_flags.append('-I' + abs_path) - elif flag.startswith('-') and flag[1] in 'DWFfmO': - if flag == '-Wno-deprecated-register' or flag == '-Wno-header-guard': - # These flags causes libclang (3.3) to crash. Remove it until things - # are fixed. - continue - chrome_flags.append(flag) - - return chrome_flags - - -def FlagsForFile(filename): - """This is the main entry point for YCM. Its interface is fixed. - - Args: - filename: (String) Path to source file being edited. - - Returns: - (Dictionary) - 'flags': (List of Strings) Command line flags. - 'do_cache': (Boolean) True if the result should be cached. - """ - chrome_root = FindChromeSrcFromFilename(filename) - chrome_flags = GetClangCommandFromNinjaForFilename(chrome_root, - filename) - final_flags = flags + chrome_flags - - return { - 'flags': final_flags, - 'do_cache': True - } diff --git a/chromium/tools/vim/filetypes.vim b/chromium/tools/vim/filetypes.vim deleted file mode 100644 index 3e7c8f9eada..00000000000 --- a/chromium/tools/vim/filetypes.vim +++ /dev/null @@ -1,9 +0,0 @@ -" To get syntax highlighting and tab settings for gyp(i) and DEPS files, -" add the following to your .vimrc file: -" so /path/to/src/tools/vim/filetypes.vim - -augroup filetype - au! BufRead,BufNewFile *.gyp set filetype=python expandtab tabstop=2 shiftwidth=2 - au! BufRead,BufNewFile *.gypi set filetype=python expandtab tabstop=2 shiftwidth=2 - au! BufRead,BufNewFile DEPS set filetype=python expandtab tabstop=2 shiftwidth=2 -augroup END diff --git a/chromium/tools/vim/ninja-build.vim b/chromium/tools/vim/ninja-build.vim deleted file mode 100644 index 852c5a99eb0..00000000000 --- a/chromium/tools/vim/ninja-build.vim +++ /dev/null @@ -1,129 +0,0 @@ -" Copyright (c) 2012 The Chromium Authors. All rights reserved. -" Use of this source code is governed by a BSD-style license that can be -" found in the LICENSE file. -" -" Adds a "Compile this file" function, using ninja. On Mac, binds Cmd-k to -" this command. On Windows, Ctrl-F7 (which is the same as the VS default). -" On Linux, o, which is \o by default ("o"=creates .o files) -" -" Adds a "Build this target" function, using ninja. This is not bound -" to any key by default, but can be used via the :CrBuild command. -" It builds 'chrome' by default, but :CrBuild target1 target2 etc works as well. -" -" Requires that gyp has already generated build.ninja files, and that ninja is -" in your path (which it is automatically if depot_tools is in your path). -" -" Add the following to your .vimrc file: -" so /path/to/src/tools/vim/ninja-build.vim - -python << endpython -import os -import vim - - -def path_to_current_buffer(): - """Returns the absolute path of the current buffer.""" - return vim.current.buffer.name - - -def path_to_source_root(): - """Returns the absolute path to the chromium source root.""" - candidate = os.path.dirname(path_to_current_buffer()) - # This is a list of files that need to identify the src directory. The shorter - # it is, the more likely it's wrong (checking for just "build/common.gypi" - # would find "src/v8" for files below "src/v8", as "src/v8/build/common.gypi" - # exists). The longer it is, the more likely it is to break when we rename - # directories. - fingerprints = ['chrome', 'net', 'v8', 'build', 'skia'] - while candidate and not all( - [os.path.isdir(os.path.join(candidate, fp)) for fp in fingerprints]): - candidate = os.path.dirname(candidate) - return candidate - - -def guess_configuration(): - """Default to the configuration with either a newer build.ninja or a newer - protoc.""" - root = os.path.join(path_to_source_root(), 'out') - def is_release_15s_newer(test_path): - try: - debug_mtime = os.path.getmtime(os.path.join(root, 'Debug', test_path)) - except os.error: - debug_mtime = 0 - try: - rel_mtime = os.path.getmtime(os.path.join(root, 'Release', test_path)) - except os.error: - rel_mtime = 0 - return rel_mtime - debug_mtime >= 15 - configuration = 'Debug' - if is_release_15s_newer('build.ninja') or is_release_15s_newer('protoc'): - configuration = 'Release' - return configuration - - -def compute_ninja_command_for_current_buffer(configuration=None): - """Returns the shell command to compile the file in the current buffer.""" - if not configuration: configuration = guess_configuration() - build_dir = os.path.join(path_to_source_root(), 'out', configuration) - - # ninja needs filepaths for the ^ syntax to be relative to the - # build directory. - file_to_build = path_to_current_buffer() - file_to_build = os.path.relpath(file_to_build, build_dir) - - build_cmd = ' '.join(['ninja', '-C', build_dir, file_to_build + '^']) - if sys.platform == 'win32': - # Escape \ for Vim, and ^ for both Vim and shell. - build_cmd = build_cmd.replace('\\', '\\\\').replace('^', '^^^^') - vim.command('return "%s"' % build_cmd) - - -def compute_ninja_command_for_targets(targets='', configuration=None): - if not configuration: configuration = guess_configuration() - build_dir = os.path.join(path_to_source_root(), 'out', configuration) - build_cmd = ' '.join(['ninja', '-C', build_dir, targets]) - vim.command('return "%s"' % build_cmd) -endpython - -fun! s:MakeWithCustomCommand(build_cmd) - let l:oldmakepgr = &makeprg - let &makeprg=a:build_cmd - silent make | cwindow - if !has('gui_running') - redraw! - endif - let &makeprg = l:oldmakepgr -endfun - -fun! s:NinjaCommandForCurrentBuffer() - python compute_ninja_command_for_current_buffer() -endfun - -fun! s:NinjaCommandForTargets(targets) - python compute_ninja_command_for_targets(vim.eval('a:targets')) -endfun - -fun! CrCompileFile() - call s:MakeWithCustomCommand(s:NinjaCommandForCurrentBuffer()) -endfun - -fun! CrBuild(...) - let l:targets = a:0 > 0 ? join(a:000, ' ') : '' - if (l:targets !~ '\i') - let l:targets = 'chrome' - endif - call s:MakeWithCustomCommand(s:NinjaCommandForTargets(l:targets)) -endfun - -command! CrCompileFile call CrCompileFile() -command! -nargs=* CrBuild call CrBuild() - -if has('mac') - map :CrCompileFile - imap :CrCompileFile -elseif has('win32') - map :CrCompileFile - imap :CrCompileFile -elseif has('unix') - map o :CrCompileFile -endif diff --git a/chromium/tools/win/static_initializers/static_initializers.gyp b/chromium/tools/win/static_initializers/static_initializers.gyp new file mode 100644 index 00000000000..724091f23a8 --- /dev/null +++ b/chromium/tools/win/static_initializers/static_initializers.gyp @@ -0,0 +1,28 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'variables': { + 'chromium_code': 1, + }, + 'conditions': [ + ['not msvs_express', { + 'targets': [ + { + 'target_name': 'static_initializers', + 'type': 'executable', + 'sources': [ + 'static_initializers.cc', + ], + 'include_dirs': [ + '$(VSInstallDir)/DIA SDK/include', + ], + }, + ], + }, { + 'targets': [], + }], + ] +} + diff --git a/chromium/tools/win/toolchain/7z/7z.dll b/chromium/tools/win/toolchain/7z/7z.dll deleted file mode 100755 index cea996e4f53..00000000000 Binary files a/chromium/tools/win/toolchain/7z/7z.dll and /dev/null differ diff --git a/chromium/tools/win/toolchain/7z/7z.exe b/chromium/tools/win/toolchain/7z/7z.exe deleted file mode 100755 index b55fefe6d97..00000000000 Binary files a/chromium/tools/win/toolchain/7z/7z.exe and /dev/null differ diff --git a/chromium/tools/win/toolchain/7z/LICENSE b/chromium/tools/win/toolchain/7z/LICENSE deleted file mode 100644 index 9c2341363fb..00000000000 --- a/chromium/tools/win/toolchain/7z/LICENSE +++ /dev/null @@ -1,57 +0,0 @@ - 7-Zip - ~~~~~ - License for use and distribution - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - 7-Zip Copyright (C) 1999-2012 Igor Pavlov. - - Licenses for files are: - - 1) 7z.dll: GNU LGPL + unRAR restriction - 2) All other files: GNU LGPL - - The GNU LGPL + unRAR restriction means that you must follow both - GNU LGPL rules and unRAR restriction rules. - - - Note: - You can use 7-Zip on any computer, including a computer in a commercial - organization. You don't need to register or pay for 7-Zip. - - - GNU LGPL information - -------------------- - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You can receive a copy of the GNU Lesser General Public License from - http://www.gnu.org/ - - - unRAR restriction - ----------------- - - The decompression engine for RAR archives was developed using source - code of unRAR program. - All copyrights to original unRAR code are owned by Alexander Roshal. - - The license for original unRAR code has the following restriction: - - The unRAR sources cannot be used to re-create the RAR compression algorithm, - which is proprietary. Distribution of modified unRAR sources in separate form - or as a part of other software is permitted, provided that it is clearly - stated in the documentation and source comments that the code may - not be used to develop a RAR (WinRAR) compatible archiver. - - - -- - Igor Pavlov - diff --git a/chromium/tools/win/toolchain/get_toolchain_if_necessary.py b/chromium/tools/win/toolchain/get_toolchain_if_necessary.py deleted file mode 100644 index da21f95983d..00000000000 --- a/chromium/tools/win/toolchain/get_toolchain_if_necessary.py +++ /dev/null @@ -1,138 +0,0 @@ -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import ctypes.wintypes -import hashlib -import json -import os -import subprocess -import sys - - -BASEDIR = os.path.dirname(os.path.abspath(__file__)) - - -GetFileAttributes = ctypes.windll.kernel32.GetFileAttributesW -GetFileAttributes.argtypes = (ctypes.wintypes.LPWSTR,) -GetFileAttributes.restype = ctypes.wintypes.DWORD -FILE_ATTRIBUTE_HIDDEN = 0x2 -FILE_ATTRIBUTE_SYSTEM = 0x4 - - -def IsHidden(file_path): - """Returns whether the given |file_path| has the 'system' or 'hidden' - attribute set.""" - p = GetFileAttributes(file_path) - assert p != 0xffffffff - return bool(p & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) - - -def GetFileList(root): - """Gets a normalized list of files under |root|.""" - assert not os.path.isabs(root) - assert os.path.normpath(root) == root - file_list = [] - for base, _, files in os.walk(root): - paths = [os.path.join(base, f) for f in files] - file_list.extend(x.lower() for x in paths if not IsHidden(x)) - return sorted(file_list) - - -def MakeTimestampsFileName(root): - return os.path.join(root, '..', '.timestamps') - - -def CalculateHash(root): - """Calculates the sha1 of the paths to all files in the given |root| and the - contents of those files, and returns as a hex string.""" - file_list = GetFileList(root) - - # Check whether we previously saved timestamps in $root/../.timestamps. If - # we didn't, or they don't match, then do the full calculation, otherwise - # return the saved value. - timestamps_file = MakeTimestampsFileName(root) - timestamps_data = {'files': [], 'sha1': ''} - if os.path.exists(timestamps_file): - with open(timestamps_file, 'rb') as f: - try: - timestamps_data = json.load(f) - except ValueError: - # json couldn't be loaded, empty data will force a re-hash. - pass - - matches = len(file_list) == len(timestamps_data['files']) - if matches: - for disk, cached in zip(file_list, timestamps_data['files']): - if disk != cached[0] or os.stat(disk).st_mtime != cached[1]: - matches = False - break - if matches: - return timestamps_data['sha1'] - - digest = hashlib.sha1() - for path in file_list: - digest.update(path) - with open(path, 'rb') as f: - digest.update(f.read()) - return digest.hexdigest() - - -def SaveTimestampsAndHash(root, sha1): - """Save timestamps and the final hash to be able to early-out more quickly - next time.""" - file_list = GetFileList(root) - timestamps_data = { - 'files': [[f, os.stat(f).st_mtime] for f in file_list], - 'sha1': sha1, - } - with open(MakeTimestampsFileName(root), 'wb') as f: - json.dump(timestamps_data, f) - - -def main(): - if sys.platform not in ('win32', 'cygwin'): - return 0 - - if len(sys.argv) != 1: - print >> sys.stderr, 'Unexpected arguments.' - return 1 - - # Move to same location as .gclient. This is a no-op when run via gclient. - os.chdir(os.path.normpath(os.path.join(BASEDIR, '..\\..\\..\\..'))) - toolchain_dir = 'src\\third_party\\win_toolchain' - target_dir = os.path.join(toolchain_dir, 'files') - - sha1path = os.path.join(toolchain_dir, 'toolchain.sha1') - desired_hash = '' - if os.path.isfile(sha1path): - with open(sha1path, 'rb') as f: - desired_hash = f.read().strip() - - # If the current hash doesn't match what we want in the file, nuke and pave. - # Typically this script is only run when the .sha1 one file is updated, but - # directly calling "gclient runhooks" will also run it, so we cache - # based on timestamps to make that case fast. - current_hash = CalculateHash(target_dir) - if current_hash != desired_hash: - print 'Windows toolchain out of date or doesn\'t exist, updating...' - if os.path.isdir(target_dir): - subprocess.check_call('rmdir /s/q "%s"' % target_dir, shell=True) - subprocess.check_call([ - sys.executable, - 'src\\tools\\win\\toolchain\\toolchain2013.py', - '--targetdir', target_dir]) - current_hash = CalculateHash(target_dir) - if current_hash != desired_hash: - print >> sys.stderr, ( - 'Got wrong hash after pulling a new toolchain. ' - 'Wanted \'%s\', got \'%s\'.' % ( - desired_hash, current_hash)) - return 1 - SaveTimestampsAndHash(target_dir, current_hash) - - return 0 - - -if __name__ == '__main__': - sys.exit(main()) diff --git a/chromium/tools/win/toolchain/toolchain.py b/chromium/tools/win/toolchain/toolchain.py deleted file mode 100644 index 1c16fb1632b..00000000000 --- a/chromium/tools/win/toolchain/toolchain.py +++ /dev/null @@ -1,714 +0,0 @@ -# Copyright 2012 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Extracts a Windows toolchain suitable for building Chrome from various -# downloadable pieces. - - -import ctypes -from optparse import OptionParser -import os -import shutil -import subprocess -import sys -import tempfile -import urllib2 - - -g_temp_dirs = [] - - -def GetLongPathName(path): - """Converts any 8dot3 names in the path to the full name.""" - buf = ctypes.create_unicode_buffer(260) - size = ctypes.windll.kernel32.GetLongPathNameW(unicode(path), buf, 260) - if (size > 260): - raise SystemExit('Long form of path longer than 260 chars: %s' % path) - return buf.value - - -def RunOrDie(command): - rc = subprocess.call(command, shell=True) - if rc != 0: - raise SystemExit('%s failed.' % command) - - -def TempDir(): - """Generate a temporary directory (for downloading or extracting to) and keep - track of the directory that's created for cleaning up later.""" - global g_temp_dirs - temp = tempfile.mkdtemp() - g_temp_dirs.append(temp) - return temp - - -def DeleteAllTempDirs(): - """Remove all temporary directories created by |TempDir()|.""" - global g_temp_dirs - if g_temp_dirs: - sys.stdout.write('Cleaning up temporaries...\n') - for temp in g_temp_dirs: - # shutil.rmtree errors out on read only attributes. - RunOrDie('rmdir /s/q "%s"' % temp) - g_temp_dirs = [] - - -def Download(url, local_path): - """Download a large-ish binary file and print some status information while - doing so.""" - sys.stdout.write('Downloading %s...\n' % url) - req = urllib2.urlopen(url) - content_length = int(req.headers.get('Content-Length', 0)) - bytes_read = 0 - terminator = '\r' if sys.stdout.isatty() else '\n' - with open(local_path, 'wb') as file: - while True: - chunk = req.read(1024 * 1024) - if not chunk: - break - bytes_read += len(chunk) - file.write(chunk) - sys.stdout.write('... %d/%d%s' % (bytes_read, content_length, terminator)) - sys.stdout.flush() - sys.stdout.write('\n') - if content_length and content_length != bytes_read: - raise SystemExit('Got incorrect number of bytes downloading %s' % url) - - -def DownloadSDK71Iso(): - sdk7_temp_dir = TempDir() - target_path = os.path.join(sdk7_temp_dir, 'GRMSDKX_EN_DVD.iso') - Download( - ('http://download.microsoft.com/download/' - 'F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDKX_EN_DVD.iso'), - target_path) - return target_path - - -def DownloadWDKIso(): - wdk_temp_dir = TempDir() - target_path = os.path.join(wdk_temp_dir, 'GRMWDK_EN_7600_1.ISO') - Download( - ('http://download.microsoft.com/download/' - '4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO'), - target_path) - return target_path - - -def DownloadSDKUpdate(): - sdk_update_temp_dir = TempDir() - target_path = os.path.join(sdk_update_temp_dir, 'VC-Compiler-KB2519277.exe') - Download( - ('http://download.microsoft.com/download/' - '7/5/0/75040801-126C-4591-BCE4-4CD1FD1499AA/VC-Compiler-KB2519277.exe'), - target_path) - return target_path - - -def DownloadDirectXSDK(): - dxsdk_temp_dir = TempDir() - target_path = os.path.join(dxsdk_temp_dir, 'DXSDK_Jun10.exe') - Download( - ('http://download.microsoft.com/download/' - 'A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe'), - target_path) - return target_path - - -def DownloadVS2012ExIso(): - ex_temp_dir = TempDir() - target_path = os.path.join(ex_temp_dir, 'VS2012_WDX_ENU.iso') - Download( - ('http://download.microsoft.com/download/' - '1/F/5/1F519CC5-0B90-4EA3-8159-33BFB97EF4D9/VS2012_WDX_ENU.iso'), - target_path) - return target_path - - -def DownloadSDK8(): - """Download the Win8 SDK. This one is slightly different than the simple - ones above. There is no .ISO distribution for the Windows 8 SDK. Rather, a - tool is provided that is a download manager. This is used to download the - various .msi files to a target location. Unfortunately, this tool requires - elevation for no obvious reason even when only downloading, so this function - will trigger a UAC elevation if the script is not run from an elevated - prompt.""" - # Use the long path name here because because 8dot3 names don't seem to work. - sdk_temp_dir = GetLongPathName(TempDir()) - target_path = os.path.join(sdk_temp_dir, 'sdksetup.exe') - standalone_path = os.path.join(sdk_temp_dir, 'Standalone') - Download( - ('http://download.microsoft.com/download/' - 'F/1/3/F1300C9C-A120-4341-90DF-8A52509B23AC/standalonesdk/sdksetup.exe'), - target_path) - sys.stdout.write( - 'Running sdksetup.exe to download Win8 SDK (may request elevation)...\n') - count = 0 - while count < 5: - rc = os.system(target_path + ' /quiet ' - '/features OptionId.WindowsDesktopSoftwareDevelopmentKit ' - '/layout ' + standalone_path) - if rc == 0: - return standalone_path - count += 1 - sys.stdout.write('Windows 8 SDK failed to download, retrying.\n') - raise SystemExit("After multiple retries, couldn't download Win8 SDK") - - -def DownloadVS2012Update3(): - """Download Update3 to VS2012. See notes in DownloadSDK8.""" - update3_dir = TempDir() - target_path = os.path.join(update3_dir, 'VS2012.3.iso') - Download( - ('http://download.microsoft.com/download/' - 'D/4/8/D48D1AC2-A297-4C9E-A9D0-A218E6609F06/VS2012.3.iso'), - target_path) - return target_path - - -class SourceImages2010(object): - def __init__(self, sdk8_path, wdk_iso, sdk7_update, sdk7_path, dxsdk_path): - self.sdk8_path = sdk8_path - self.wdk_iso = wdk_iso - self.sdk7_update = sdk7_update - self.sdk7_path = sdk7_path - self.dxsdk_path = dxsdk_path - - -def GetSourceImages2010(local_dir): - """Download all distribution archives for the components we need.""" - if local_dir: - return SourceImages2010( - sdk8_path=os.path.join(local_dir, 'Standalone'), - wdk_iso=os.path.join(local_dir, 'GRMWDK_EN_7600_1.ISO'), - sdk7_update=os.path.join(local_dir, 'VC-Compiler-KB2519277.exe'), - sdk7_path=os.path.join(local_dir, 'GRMSDKX_EN_DVD.ISO'), - dxsdk_path=os.path.join(local_dir, 'DXSDK_Jun10.exe')) - else: - # Note that we do the Win8 SDK first so that its silly UAC prompt - # happens before the user wanders off to get coffee. - sdk8_path = DownloadSDK8() - wdk_iso = DownloadWDKIso() - sdk7_update = DownloadSDKUpdate() - sdk7_path = DownloadSDK71Iso() - dxsdk_path = DownloadDirectXSDK() - return SourceImages2010( - sdk8_path, wdk_iso, sdk7_update, sdk7_path, dxsdk_path) - - -class SourceImages2012(): - def __init__(self, ex_path, update_path, wdk_iso): - self.ex_path = ex_path - self.update_path = update_path - self.wdk_iso = wdk_iso - - -def GetSourceImages2012(local_dir): - """Download all distribution archives for the components we need.""" - if local_dir: - return SourceImages2012( - ex_path=os.path.join(local_dir, 'VS2012_WDX_ENU.iso'), - update_path=os.path.join(local_dir, 'VS2012.3.iso'), - wdk_iso=os.path.join(local_dir, 'GRMWDK_EN_7600_1.ISO')) - else: - ex_path = DownloadVS2012ExIso() - wdk_iso = DownloadWDKIso() - update_path = DownloadVS2012Update3() - return SourceImages2012( - ex_path=ex_path, - update_path=update_path, - wdk_iso=wdk_iso) - - -def ExtractIso(iso_path): - """Use 7zip to extract the contents of the given .iso (or self-extracting - .exe).""" - target_path = TempDir() - sys.stdout.write('Extracting %s...\n' % iso_path) - sys.stdout.flush() - # TODO(scottmg): Do this (and exe) manually with python code. - # Note that at the beginning of main() we set the working directory to 7z's - # location. - RunOrDie('7z x "%s" -y "-o%s" >nul' % (iso_path, target_path)) - return target_path - - -ExtractExe = ExtractIso - - -def ExtractMsi(msi_path): - """Use msiexec to extract the contents of the given .msi file.""" - sys.stdout.write('Extracting %s...\n' % msi_path) - target_path = TempDir() - RunOrDie('msiexec /a "%s" /qn TARGETDIR="%s"' % (msi_path, target_path)) - return target_path - - -class ExtractedComponents2010(object): - def __init__(self, - vc_x86, vc_x64, - buildtools_x86, buildtools_x64, libs_x86, libs_x64, headers, - update_x86, update_x64, - sdk_path, metro_sdk_path, - dxsdk): - self.vc_x86 = vc_x86 - self.vc_x64 = vc_x64 - self.buildtools_x86 = buildtools_x86 - self.buildtools_x64 = buildtools_x64 - self.libs_x86 = libs_x86 - self.libs_x64 = libs_x64 - self.headers = headers - self.update_x86 = update_x86 - self.update_x64 = update_x64 - self.sdk_path = sdk_path - self.metro_sdk_path = metro_sdk_path - self.dxsdk = dxsdk - - -def ExtractComponents2010(images): - """Given the paths to the images, extract the required parts, and return - an object containing paths to all the pieces.""" - extracted_sdk7 = ExtractIso(images.sdk7_path) - extracted_vc_x86 = \ - ExtractMsi(os.path.join(extracted_sdk7, - r'Setup\vc_stdx86\vc_stdx86.msi')) - extracted_vc_x64 = \ - ExtractMsi(os.path.join(extracted_sdk7, - r'Setup\vc_stdamd64\vc_stdamd64.msi')) - - extracted_wdk = ExtractIso(images.wdk_iso) - extracted_buildtools_x86 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x86fre.msi')) - extracted_buildtools_x64 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x64fre.msi')) - extracted_libs_x86 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x86fre.msi')) - extracted_libs_x64 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x64fre.msi')) - extracted_headers = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\headers.msi')) - - extracted_update = ExtractExe(images.sdk7_update) - extracted_update_x86 = \ - ExtractMsi(os.path.join(extracted_update, 'vc_stdx86.msi')) - extracted_update_x64 = \ - ExtractMsi(os.path.join(extracted_update, 'vc_stdamd64.msi')) - - sdk_msi_path = os.path.join( - images.sdk8_path, - r'Installers\Windows Software Development Kit-x86_en-us.msi') - extracted_sdk_path = ExtractMsi(sdk_msi_path) - - sdk_metro_msi_path = os.path.join( - images.sdk8_path, - 'Installers', - 'Windows Software Development Kit for Metro style Apps-x86_en-us.msi') - extracted_metro_sdk_path = ExtractMsi(sdk_metro_msi_path) - - extracted_dxsdk = ExtractExe(images.dxsdk_path) - - return ExtractedComponents2010( - vc_x86=extracted_vc_x86, - vc_x64=extracted_vc_x64, - buildtools_x86=extracted_buildtools_x86, - buildtools_x64=extracted_buildtools_x64, - libs_x86=extracted_libs_x86, - libs_x64=extracted_libs_x64, - headers=extracted_headers, - update_x86=extracted_update_x86, - update_x64=extracted_update_x64, - sdk_path=extracted_sdk_path, - metro_sdk_path=extracted_metro_sdk_path, - dxsdk=extracted_dxsdk) - - -class ExtractedComponents2012(object): - def __init__(self, - vc_x86, vc_x86_res, librarycore, - vc_x86_update, vc_x86_res_update, librarycore_update, - sdk_path, metro_sdk_path, - buildtools_x86, buildtools_x64, libs_x86, libs_x64, headers): - self.vc_x86 = vc_x86 - self.vc_x86_res = vc_x86_res - self.librarycore = librarycore - self.vc_x86_update = vc_x86_update - self.vc_x86_res_update = vc_x86_res_update - self.librarycore_update = librarycore_update - self.buildtools_x86 = buildtools_x86 - self.buildtools_x64 = buildtools_x64 - self.libs_x86 = libs_x86 - self.libs_x64 = libs_x64 - self.headers = headers - self.sdk_path = sdk_path - self.metro_sdk_path = metro_sdk_path - - -def ExtractComponents2012(images): - """Given the paths to the images, extract the required parts and return an - object containing paths to all the pieces.""" - extracted_ex = ExtractIso(images.ex_path) - - extracted_compilercore = ExtractMsi(os.path.join( - extracted_ex, - r'packages\vc_compilerCore86\vc_compilerCore86.msi')) - - extracted_compilercore_res = ExtractMsi(os.path.join( - extracted_ex, - r'packages\vc_compilerCore86res\vc_compilerCore86res.msi')) - - extracted_librarycore = ExtractMsi(os.path.join( - extracted_ex, - r'packages\vc_librarycore86\vc_librarycore86.msi')) - - extracted_wdk = ExtractIso(images.wdk_iso) - extracted_buildtools_x86 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x86fre.msi')) - extracted_buildtools_x64 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\buildtools_x64fre.msi')) - extracted_libs_x86 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x86fre.msi')) - extracted_libs_x64 = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\libs_x64fre.msi')) - extracted_headers = \ - ExtractMsi(os.path.join(extracted_wdk, r'WDK\headers.msi')) - - sdk_msi_path = os.path.join( - extracted_ex, 'packages', 'Windows_SDK', - r'Windows Software Development Kit-x86_en-us.msi') - extracted_sdk_path = ExtractMsi(sdk_msi_path) - - sdk_metro_msi_path = os.path.join( - extracted_ex, 'packages', 'Windows_SDK', - 'Windows Software Development Kit for Metro style Apps-x86_en-us.msi') - extracted_metro_sdk_path = ExtractMsi(sdk_metro_msi_path) - - extracted_update = ExtractIso(images.update_path) - - extracted_compilercore_update = ExtractMsi(os.path.join( - extracted_update, r'packages\vc_compilercore86\vc_compilercore86.msi')) - - extracted_compilercore_res_update = ExtractMsi(os.path.join( - extracted_update, - r'packages\vc_compilercore86res\enu\vc_compilercore86res.msi')) - - extracted_librarycore_update = ExtractMsi(os.path.join( - extracted_update, r'packages\vc_librarycore86\vc_librarycore86.msi')) - - return ExtractedComponents2012( - vc_x86=extracted_compilercore, - vc_x86_res=extracted_compilercore_res, - librarycore=extracted_librarycore, - vc_x86_update=extracted_compilercore_update, - vc_x86_res_update=extracted_compilercore_res_update, - librarycore_update=extracted_compilercore_update, - sdk_path=extracted_sdk_path, - metro_sdk_path=extracted_metro_sdk_path, - buildtools_x86=extracted_buildtools_x86, - buildtools_x64=extracted_buildtools_x64, - libs_x86=extracted_libs_x86, - libs_x64=extracted_libs_x64, - headers=extracted_headers) - - -def PullFrom(list_of_path_pairs, source_root, target_dir): - """Each pair in |list_of_path_pairs| is (from, to). Join the 'from' with - |source_root| and the 'to' with |target_dir| and perform a recursive copy.""" - for source, destination in list_of_path_pairs: - full_source = os.path.join(source_root, source) - full_target = os.path.join(target_dir, destination) - rc = os.system('robocopy /s "%s" "%s" >nul' % (full_source, full_target)) - if (rc & 8) != 0 or (rc & 16) != 0: - # ref: http://ss64.com/nt/robocopy-exit.html - raise SystemExit("Couldn't copy %s to %s" % (full_source, full_target)) - - -def CopyToFinalLocation2010(extracted, target_dir): - """Copy all the directories we need to the target location.""" - sys.stdout.write('Pulling together required pieces...\n') - - # Note that order is important because some of the older ones are - # overwritten by updates. - from_sdk = [(r'Windows Kits\8.0', r'win8sdk')] - PullFrom(from_sdk, extracted.sdk_path, target_dir) - - from_metro_sdk = [(r'Windows Kits\8.0', r'win8sdk')] - PullFrom(from_sdk, extracted.metro_sdk_path, target_dir) - - from_buildtools_x86 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\x86', r'WDK\bin'), - ] - PullFrom(from_buildtools_x86, extracted.buildtools_x86, target_dir) - - from_buildtools_x64 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\amd64', r'WDK\bin'), - ] - PullFrom(from_buildtools_x64, extracted.buildtools_x64, target_dir) - - from_libs_x86 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib'), - ] - PullFrom(from_libs_x86, extracted.libs_x86, target_dir) - - from_libs_x64 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib'), - ] - PullFrom(from_libs_x64, extracted.libs_x64, target_dir) - - from_headers = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\inc', r'WDK\inc'), - ] - PullFrom(from_headers, extracted.headers, target_dir) - - # The compiler update to get the SP1 compiler is a bit of a mess. See - # http://goo.gl/n1DeO. The summary is that update for the standalone compiler - # binary installs a broken set of headers. So, add an empty ammintrin.h since - # we don't actually need the contents of it (for Chromium). - - from_sdk7_x86 = [ - (r'Program Files\Microsoft Visual Studio 10.0', '.'), - (r'Win\System', r'VC\bin'), - ] - PullFrom(from_sdk7_x86, extracted.vc_x86, target_dir) - - from_sdk7_x64 =[ - (r'Program Files(64)\Microsoft Visual Studio 10.0', '.'), - (r'Win\System64', r'VC\bin\amd64'), - ] - PullFrom(from_sdk7_x64, extracted.vc_x64, target_dir) - - from_vcupdate_x86 = [ - (r'Program Files\Microsoft Visual Studio 10.0', '.'), - (r'Win\System', r'VC\bin'), - ] - PullFrom(from_vcupdate_x86, extracted.update_x86, target_dir) - - from_vcupdate_x64 = [ - (r'Program Files(64)\Microsoft Visual Studio 10.0', '.'), - (r'Win\System64', r'VC\bin\amd64'), - ] - PullFrom(from_vcupdate_x64, extracted.update_x64, target_dir) - - sys.stdout.write('Stubbing ammintrin.h...\n') - open(os.path.join(target_dir, r'VC\include\ammintrin.h'), 'w').close() - - from_dxsdk = [ - (r'DXSDK\Include', r'DXSDK\Include'), - (r'DXSDK\Lib', r'DXSDK\Lib'), - (r'DXSDK\Redist', r'DXSDK\Redist'), - ] - PullFrom(from_dxsdk, extracted.dxsdk, target_dir) - - -def CopyToFinalLocation2012(extracted, target_dir): - """Copy all directories we need to the target location.""" - sys.stdout.write('Pulling together required pieces...\n') - - # Note that order is important because some of the older ones are - # overwritten by updates. - from_sdk = [(r'Windows Kits\8.0', r'win8sdk')] - PullFrom(from_sdk, extracted.sdk_path, target_dir) - - from_metro_sdk = [(r'Windows Kits\8.0', r'win8sdk')] - PullFrom(from_sdk, extracted.metro_sdk_path, target_dir) - - # Stock compiler. - from_compiler = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_compiler, extracted.vc_x86, target_dir) - - from_compiler_res = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_compiler_res, extracted.vc_x86_res, target_dir) - - from_library = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_library, extracted.librarycore, target_dir) - - # WDK. - from_buildtools_x86 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\x86', r'WDK\bin'), - ] - PullFrom(from_buildtools_x86, extracted.buildtools_x86, target_dir) - - from_buildtools_x64 = [ - (r'WinDDK\7600.16385.win7_wdk.100208-1538\bin\amd64', r'WDK\bin'), - ] - PullFrom(from_buildtools_x64, extracted.buildtools_x64, target_dir) - - from_libs_x86 = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib')] - PullFrom(from_libs_x86, extracted.libs_x86, target_dir) - - from_libs_x64 = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\lib', r'WDK\lib')] - PullFrom(from_libs_x64, extracted.libs_x64, target_dir) - - from_headers = [(r'WinDDK\7600.16385.win7_wdk.100208-1538\inc', r'WDK\inc')] - PullFrom(from_headers, extracted.headers, target_dir) - - # Update bits. - from_compiler = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_compiler, extracted.vc_x86_update, target_dir) - - from_compiler_res = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_compiler_res, extracted.vc_x86_res_update, target_dir) - - from_library = [(r'Program Files\Microsoft Visual Studio 11.0', '.')] - PullFrom(from_library, extracted.librarycore_update, target_dir) - - -def PatchAsyncInfo(target_dir): - """Apply patch from - http://www.chromium.org/developers/how-tos/build-instructions-windows for - asyncinfo.h.""" - # This is only required for the 2010 compiler. - sys.stdout.write('Patching asyncinfo.h...\n') - asyncinfo_h_path = os.path.join( - target_dir, r'win8sdk\Include\winrt\asyncinfo.h') - with open(asyncinfo_h_path, 'rb') as f: - asyncinfo_h = f.read() - patched = asyncinfo_h.replace( - 'enum class AsyncStatus {', 'enum AsyncStatus {') - with open(asyncinfo_h_path, 'wb') as f: - f.write(patched) - - -def GenerateSetEnvCmd(target_dir, vsversion): - """Generate a batch file that gyp expects to exist to set up the compiler - environment. This is normally generated by a full install of the SDK, but we - do it here manually since we do not do a full install.""" - with open(os.path.join( - target_dir, r'win8sdk\bin\SetEnv.cmd'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain.py.\n') - file.write(':: Targeting VS%s.\n' % vsversion) - # Common to x86 and x64 - file.write('set PATH=%s;%%PATH%%\n' % ( - os.path.join(target_dir, r'Common7\IDE'))) - file.write('set INCLUDE=%s;%s;%s\n' % ( - os.path.join(target_dir, r'win8sdk\Include\um'), - os.path.join(target_dir, r'win8sdk\Include\shared'), - os.path.join(target_dir, r'VC\include'))) - file.write('if "%1"=="/x64" goto x64\n') - - # x86 only. - file.write('set PATH=%s;%s;%s;%%PATH%%\n' % ( - os.path.join(target_dir, r'win8sdk\bin\x86'), - os.path.join(target_dir, r'VC\bin'), - os.path.join(target_dir, r'WDK\bin'))) - file.write('set LIB=%s;%s\n' % ( - os.path.join(target_dir, r'VC\lib'), - os.path.join(target_dir, r'win8sdk\Lib\win8\um\x86'))) - file.write('goto done\n') - - # Unfortunately, 2012 Express does not include a native 64 bit compiler, - # so we have to use the x86->x64 cross. - if vsversion == '2012': - # x64 only. - file.write(':x64\n') - file.write('set PATH=%s;%s;%s;%%PATH%%\n' % ( - os.path.join(target_dir, r'win8sdk\bin\x64'), - os.path.join(target_dir, r'VC\bin\x86_amd64'), - os.path.join(target_dir, r'WDK\bin\amd64'))) - file.write('set LIB=%s;%s\n' % ( - os.path.join(target_dir, r'VC\lib\amd64'), - os.path.join(target_dir, r'win8sdk\Lib\win8\um\x64'))) - else: - # x64 only. - file.write(':x64\n') - file.write('set PATH=%s;%s;%s;%%PATH%%\n' % ( - os.path.join(target_dir, r'win8sdk\bin\x64'), - os.path.join(target_dir, r'VC\bin\amd64'), - os.path.join(target_dir, r'WDK\bin\amd64'))) - file.write('set LIB=%s;%s\n' % ( - os.path.join(target_dir, r'VC\lib\amd64'), - os.path.join(target_dir, r'win8sdk\Lib\win8\um\x64'))) - - file.write(':done\n') - - -def GenerateTopLevelEnv(target_dir, vsversion): - """Generate a batch file that sets up various environment variables that let - the Chromium build files and gyp find SDKs and tools.""" - with open(os.path.join(target_dir, r'env.bat'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain.py.\n') - file.write(':: Targeting VS%s.\n' % vsversion) - file.write('set GYP_DEFINES=windows_sdk_path="%s" ' - 'component=shared_library\n' % ( - os.path.join(target_dir, 'win8sdk'))) - file.write('set GYP_MSVS_VERSION=%se\n' % vsversion) - file.write('set GYP_MSVS_OVERRIDE_PATH=%s\n' % target_dir) - file.write('set GYP_GENERATORS=ninja\n') - file.write('set GYP_PARALLEL=1\n') - file.write('set WDK_DIR=%s\n' % os.path.join(target_dir, r'WDK')) - if vsversion == '2010': - file.write('set DXSDK_DIR=%s\n' % os.path.join(target_dir, r'DXSDK')) - file.write('set WindowsSDKDir=%s\n' % - os.path.join(target_dir, r'win8sdk')) - if vsversion == '2012': - # TODO: For 2010 too. - base = os.path.join(target_dir, r'VC\redist') - paths = [ - r'Debug_NonRedist\x64\Microsoft.VC110.DebugCRT', - r'Debug_NonRedist\x86\Microsoft.VC110.DebugCRT', - r'x64\Microsoft.VC110.CRT', - r'x86\Microsoft.VC110.CRT', - ] - additions = ';'.join(os.path.join(base, x) for x in paths) - file.write('set PATH=%s;%%PATH%%\n' % additions) - file.write('echo Environment set for toolchain in %s.\n' % target_dir) - file.write('cd /d %s\\..\n' % target_dir) - - -def main(): - parser = OptionParser() - parser.add_option('--targetdir', metavar='DIR', - help='put toolchain into DIR', - default=os.path.abspath('win_toolchain')) - parser.add_option('--vsversion', metavar='VSVERSION', - help='select VS version: 2010 or 2012', default='2010') - parser.add_option('--noclean', action='store_false', dest='clean', - help='do not remove temp files', - default=True) - parser.add_option('--local', metavar='DIR', - help='use downloaded files from DIR') - options, args = parser.parse_args() - try: - target_dir = os.path.abspath(options.targetdir) - if os.path.exists(target_dir): - sys.stderr.write('%s already exists. Please [re]move it or use ' - '--targetdir to select a different target.\n' % - target_dir) - return 1 - # Set the working directory to 7z subdirectory. 7-zip doesn't find its - # codec dll very well, so this is the simplest way to make sure it runs - # correctly, as we don't otherwise care about working directory. - os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), '7z')) - assert options.vsversion in ('2010', '2012') - if options.vsversion == '2012': - images = GetSourceImages2012(options.local) - extracted = ExtractComponents2012(images) - CopyToFinalLocation2012(extracted, target_dir) - else: - images = GetSourceImages2010(options.local) - extracted = ExtractComponents2010(images) - CopyToFinalLocation2010(extracted, target_dir) - PatchAsyncInfo(target_dir) - - GenerateSetEnvCmd(target_dir, options.vsversion) - GenerateTopLevelEnv(target_dir, options.vsversion) - finally: - if options.clean: - DeleteAllTempDirs() - - sys.stdout.write( - '\nIn a (clean) cmd shell, you can now run\n\n' - ' %s\\env.bat\n\n' - 'then\n\n' - " gclient runhooks (or gclient sync if you haven't pulled deps yet)\n" - ' ninja -C out\Debug chrome\n\n' - 'Note that this script intentionally does not modify any global\n' - 'settings like the registry, or system environment variables, so you\n' - 'will need to run the above env.bat whenever you start a new\n' - 'shell.\n\n' % target_dir) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/win/toolchain/toolchain2013.py b/chromium/tools/win/toolchain/toolchain2013.py deleted file mode 100644 index 9b886d4a70a..00000000000 --- a/chromium/tools/win/toolchain/toolchain2013.py +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Extracts a Windows VS2013 toolchain from various downloadable pieces. - - -from toolchain import * - - -def GetIsoUrl(pro): - """Get the .iso path.""" - prefix = 'http://download.microsoft.com/download/' - if pro: - return (prefix + - 'A/F/1/AF128362-A6A8-4DB3-A39A-C348086472CC/VS2013_RTM_PRO_ENU.iso') - else: - return (prefix + - '7/2/E/72E0F986-D247-4289-B9DC-C4FB07374894/VS2013_RTM_DskExp_ENU.iso') - - -def DownloadMainIso(url): - temp_dir = TempDir() - target_path = os.path.join(temp_dir, os.path.basename(url)) - Download(url, target_path) - return target_path - - -def GetSourceImage(local_dir, pro): - url = GetIsoUrl(pro) - if local_dir: - return os.path.join(local_dir, os.path.basename(url)) - else: - return DownloadMainIso(url) - - -def ExtractMsiList(iso_dir, packages): - results = [] - for (package, skippable) in packages: - path_to_package = os.path.join(iso_dir, 'packages', package) - if not os.path.exists(path_to_package) and skippable: - sys.stdout.write('Pro-only %s skipped.\n' % package) - continue - results.append(ExtractMsi(path_to_package)) - return results - - -def ExtractComponents(image): - extracted_iso = ExtractIso(image) - results = ExtractMsiList(extracted_iso, [ - (r'vcRuntimeAdditional_amd64\vc_runtimeAdditional_x64.msi', False), - (r'vcRuntimeAdditional_x86\vc_runtimeAdditional_x86.msi', False), - (r'vcRuntimeDebug_amd64\vc_runtimeDebug_x64.msi', False), - (r'vcRuntimeDebug_x86\vc_runtimeDebug_x86.msi', False), - (r'vcRuntimeMinimum_amd64\vc_runtimeMinimum_x64.msi', False), - (r'vcRuntimeMinimum_x86\vc_runtimeMinimum_x86.msi', False), - (r'vc_compilerCore86\vc_compilerCore86.msi', False), - (r'vc_compilerCore86res\vc_compilerCore86res.msi', False), - (r'vc_compilerx64nat\vc_compilerx64nat.msi', True), - (r'vc_compilerx64natres\vc_compilerx64natres.msi', True), - (r'vc_compilerx64x86\vc_compilerx64x86.msi', True), - (r'vc_compilerx64x86res\vc_compilerx64x86res.msi', True), - (r'vc_librarycore86\vc_librarycore86.msi', False), - (r'vc_libraryDesktop\x64\vc_LibraryDesktopX64.msi', False), - (r'vc_libraryDesktop\x86\vc_LibraryDesktopX86.msi', False), - (r'vc_libraryextended\vc_libraryextended.msi', True), - (r'Windows_SDK\Windows Software Development Kit-x86_en-us.msi', False), - ('Windows_SDK\\' - r'Windows Software Development Kit for Metro style Apps-x86_en-us.msi', - False), - ]) - return results - - -def CopyToFinalLocation(extracted_dirs, target_dir): - sys.stdout.write('Copying to final location...\n') - mappings = { - 'Program Files\\Microsoft Visual Studio 12.0\\': '.\\', - 'Windows Kits\\8.0\\': 'win8sdk\\', - 'System64\\': 'sys64\\', - 'System\\': 'sys32\\', - } - matches = [] - for extracted_dir in extracted_dirs: - for root, dirnames, filenames in os.walk(extracted_dir): - for filename in filenames: - matches.append((extracted_dir, os.path.join(root, filename))) - - copies = [] - for prefix, full_path in matches: - partial_path = full_path[len(prefix) + 1:] # +1 for trailing \ - #print 'partial_path', partial_path - for map_from, map_to in mappings.iteritems(): - #print 'map_from:', map_from, ', map_to:', map_to - if partial_path.startswith(map_from): - target_path = os.path.join(map_to, partial_path[len(map_from):]) - copies.append((full_path, os.path.join(target_dir, target_path))) - - for full_source, full_target in copies: - target_dir = os.path.dirname(full_target) - if not os.path.isdir(target_dir): - os.makedirs(target_dir) - shutil.copy2(full_source, full_target) - - -def GenerateSetEnvCmd(target_dir, pro): - """Generate a batch file that gyp expects to exist to set up the compiler - environment. This is normally generated by a full install of the SDK, but we - do it here manually since we do not do a full install.""" - with open(os.path.join( - target_dir, r'win8sdk\bin\SetEnv.cmd'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n') - # Common to x86 and x64 - file.write('set PATH=%~dp0..\\..\\Common7\\IDE;%PATH%\n') - file.write('set INCLUDE=%~dp0..\\..\\win8sdk\\Include\\um;' - '%~dp0..\\..\\win8sdk\\Include\\shared;' - '%~dp0..\\..\\VC\\include;' - '%~dp0..\\..\\VC\\atlmfc\\include\n') - file.write('if "%1"=="/x64" goto x64\n') - - # x86. If we're Pro, then use the amd64_x86 cross (we don't support x86 - # host at all). - if pro: - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;' - '%~dp0..\\..\\VC\\bin\\amd64_x86;' - '%~dp0..\\..\\VC\\bin\\amd64;' # Needed for mspdb120.dll. - '%PATH%\n') - else: - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x86;' - '%~dp0..\\..\\VC\\bin;%PATH%\n') - file.write('set LIB=%~dp0..\\..\\VC\\lib;' - '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x86;' - '%~dp0..\\..\\VC\\atlmfc\\lib\n') - file.write('goto done\n') - - # Express does not include a native 64 bit compiler, so we have to use - # the x86->x64 cross. - if not pro: - # x86->x64 cross. - file.write(':x64\n') - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;' - '%~dp0..\\..\\VC\\bin\\x86_amd64;' - '%PATH%\n') - else: - # x64 native. - file.write(':x64\n') - file.write('set PATH=%~dp0..\\..\\win8sdk\\bin\\x64;' - '%~dp0..\\..\\VC\\bin\\amd64;' - '%PATH%\n') - file.write('set LIB=%~dp0..\\..\\VC\\lib\\amd64;' - '%~dp0..\\..\\win8sdk\\Lib\\win8\\um\\x64;' - '%~dp0..\\..\\VC\\atlmfc\\lib\\amd64\n') - file.write(':done\n') - - -def GenerateTopLevelEnv(target_dir, pro): - """Generate a batch file that sets up various environment variables that let - the Chromium build files and gyp find SDKs and tools.""" - with open(os.path.join(target_dir, r'env.bat'), 'w') as file: - file.write('@echo off\n') - file.write(':: Generated by tools\\win\\toolchain\\toolchain2013.py.\n') - file.write('set GYP_DEFINES=windows_sdk_path="%~dp0win8sdk" ' - 'component=shared_library\n') - file.write('set GYP_MSVS_VERSION=2013%s\n' % '' if pro else 'e') - file.write('set GYP_MSVS_OVERRIDE_PATH=%~dp0\n') - file.write('set GYP_GENERATORS=ninja\n') - file.write('set WindowsSDKDir=%~dp0win8sdk\n') - paths = [ - r'Debug_NonRedist\x64\Microsoft.VC120.DebugCRT', - r'Debug_NonRedist\x86\Microsoft.VC120.DebugCRT', - r'x64\Microsoft.VC120.CRT', - r'x86\Microsoft.VC120.CRT', - ] - additions = ';'.join(('%~dp0' + x) for x in paths) - file.write('set PATH=%s;%%PATH%%\n' % additions) - file.write('echo Environment set for toolchain in %~dp0.\n') - file.write('cd /d %~dp0..\n') - - -def main(): - parser = OptionParser() - parser.add_option('--targetdir', metavar='DIR', - help='put toolchain into DIR', - default=os.path.abspath('win_toolchain_2013')) - parser.add_option('--noclean', action='store_false', dest='clean', - help='do not remove temp files', - default=True) - parser.add_option('--local', metavar='DIR', - help='use downloaded files from DIR') - parser.add_option('--express', metavar='EXPRESS', - help='use VS Express instead of Pro', action='store_true') - options, args = parser.parse_args() - try: - target_dir = os.path.abspath(options.targetdir) - if os.path.exists(target_dir): - sys.stderr.write('%s already exists. Please [re]move it or use ' - '--targetdir to select a different target.\n' % - target_dir) - return 1 - pro = not options.express - # Set the working directory to 7z subdirectory. 7-zip doesn't find its - # codec dll very well, so this is the simplest way to make sure it runs - # correctly, as we don't otherwise care about working directory. - os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), '7z')) - image = GetSourceImage(options.local, pro) - extracted = ExtractComponents(image) - CopyToFinalLocation(extracted, target_dir) - - GenerateSetEnvCmd(target_dir, pro) - GenerateTopLevelEnv(target_dir, pro) - finally: - if options.clean: - DeleteAllTempDirs() - - sys.stdout.write( - '\nIn a (clean) cmd shell, you can now run\n\n' - ' %s\\env.bat\n\n' - 'then\n\n' - " gclient runhooks (or gclient sync if you haven't pulled deps yet)\n" - ' ninja -C out\Debug chrome\n\n' - 'Note that this script intentionally does not modify any global\n' - 'settings like the registry, or system environment variables, so you\n' - 'will need to run the above env.bat whenever you start a new\n' - 'shell.\n\n' % target_dir) - - -if __name__ == '__main__': - main() diff --git a/chromium/tools/xdisplaycheck/xdisplaycheck.cc b/chromium/tools/xdisplaycheck/xdisplaycheck.cc deleted file mode 100644 index 8c432d1957f..00000000000 --- a/chromium/tools/xdisplaycheck/xdisplaycheck.cc +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// This is a small program that tries to connect to the X server. It -// continually retries until it connects or 30 seconds pass. If it fails -// to connect to the X server or fails to find needed functiona, it returns -// an error code of -1. -// -// This is to help verify that a useful X server is available before we start -// start running tests on the build bots. - -#include -#include -#include -#include -#include - -#if defined(USE_AURA) -#include -#endif - -void Sleep(int duration_ms) { - struct timespec sleep_time, remaining; - - // Contains the portion of duration_ms >= 1 sec. - sleep_time.tv_sec = duration_ms / 1000; - duration_ms -= sleep_time.tv_sec * 1000; - - // Contains the portion of duration_ms < 1 sec. - sleep_time.tv_nsec = duration_ms * 1000 * 1000; // nanoseconds. - - while (nanosleep(&sleep_time, &remaining) == -1 && errno == EINTR) - sleep_time = remaining; -} - -class XScopedDisplay { - public: - XScopedDisplay() : display_(NULL) {} - ~XScopedDisplay() { - if (display_) XCloseDisplay(display_); - } - - void set(Display* display) { display_ = display; } - Display* display() { return display_; } - - private: - Display* display_; -}; - -int main(int argc, char* argv[]) { - XScopedDisplay scoped_display; - if (argv[1] && strcmp(argv[1], "--noserver") == 0) { - scoped_display.set(XOpenDisplay(NULL)); - if (scoped_display.display()) { - fprintf(stderr, "Found unexpected connectable display %s\n", - XDisplayName(NULL)); - } - // Return success when we got an unexpected display so that the code - // without the --noserver is the same, but slow, rather than inverted. - return !scoped_display.display(); - } - - int kNumTries = 78; // 78*77/2 * 10 = 30s of waiting - int tries; - for (tries = 0; tries < kNumTries; ++tries) { - scoped_display.set(XOpenDisplay(NULL)); - if (scoped_display.display()) - break; - Sleep(10 * tries); - } - - if (!scoped_display.display()) { - fprintf(stderr, "Failed to connect to %s\n", XDisplayName(NULL)); - return -1; - } - - fprintf(stderr, "Connected after %d retries\n", tries); - -#if defined(USE_AURA) - // Check for XInput2 - int opcode, event, err; - if (!XQueryExtension(scoped_display.display(), "XInputExtension", &opcode, - &event, &err)) { - fprintf(stderr, - "Failed to get XInputExtension on %s.\n", XDisplayName(NULL)); - return -1; - } - - int major = 2, minor = 0; - if (XIQueryVersion(scoped_display.display(), &major, &minor) == BadRequest) { - fprintf(stderr, - "Server does not have XInput2 on %s.\n", XDisplayName(NULL)); - return -1; - } - - // Ask for the list of devices. This can cause some Xvfb to crash. - int count = 0; - XIDeviceInfo* devices = - XIQueryDevice(scoped_display.display(), XIAllDevices, &count); - if (devices) - XIFreeDeviceInfo(devices); - - fprintf(stderr, - "XInput2 verified initially sane on %s.\n", XDisplayName(NULL)); -#endif - return 0; -} - -#if defined(LEAK_SANITIZER) -// XOpenDisplay leaks memory if it takes more than one try to connect. This -// causes LSan bots to fail. We don't care about memory leaks in xdisplaycheck -// anyway, so just disable LSan completely. -extern "C" int __lsan_is_turned_off() { return 1; } -#endif -- cgit v1.2.1
  • %s" % target - print "" % (target, target) - print "